分布式系统:在客户端引发服务器端抛出的错误
Distributed system: Raise error thrown on server side on client side
我刚刚开始创建一个分布式系统,现在有一个服务器和一堆客户端。使用的语言是 python,通信是使用套接字和 JSON 完成的。当服务器端发生错误时,我将错误 [=25=]-name 和错误参数发送到客户端,如下所示:
except Exception as e:
jsonResult = {"error":
{
"name":e.__class__.__name__,
"args": e.args
}
}
jsonResult = json.dumps(jsonResult)
jsonResult += "\n"
return jsonResult
然后尝试像这样在客户端提出它:
errorFunc = decodedReply["error"]["name"]
args = decodedReply["error"]["args"]
print (args)
# Builds and appends the argumentstring to the error class-name.
errorFunc += '('
for arg in args:
# Handles when the argument is a string.
if isinstance(arg, str):
errorFunc += '\'' + arg + '\','
else:
errorFunc += arg + ','
# Removes the extra ',' from the string before adding the last ')'.
errorFunc = errorFunc[:-1]
errorFunc += ')'
# Debugging print.
print ("Here: " + errorFunc)
raise exec(errorFunc)
执行此操作时出现错误
TypeError: exceptions must derive from BaseException
根据我在这里阅读的内容:Error exception must derive from BaseException even when it does (Python 2.7)
看来我必须将其声明为 class。无论如何要解决这个问题?
根据python,您提出的问题也不例外:
>>> type(exec("ValueError('ABC')"))
<class 'NoneType'>
您需要重写代码才能拥有:
>>> errorFunc = "ValueError('ABC')"
>>> exec('raise ' + errorFunc)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
ValueError: ABC
我刚刚开始创建一个分布式系统,现在有一个服务器和一堆客户端。使用的语言是 python,通信是使用套接字和 JSON 完成的。当服务器端发生错误时,我将错误 [=25=]-name 和错误参数发送到客户端,如下所示:
except Exception as e:
jsonResult = {"error":
{
"name":e.__class__.__name__,
"args": e.args
}
}
jsonResult = json.dumps(jsonResult)
jsonResult += "\n"
return jsonResult
然后尝试像这样在客户端提出它:
errorFunc = decodedReply["error"]["name"]
args = decodedReply["error"]["args"]
print (args)
# Builds and appends the argumentstring to the error class-name.
errorFunc += '('
for arg in args:
# Handles when the argument is a string.
if isinstance(arg, str):
errorFunc += '\'' + arg + '\','
else:
errorFunc += arg + ','
# Removes the extra ',' from the string before adding the last ')'.
errorFunc = errorFunc[:-1]
errorFunc += ')'
# Debugging print.
print ("Here: " + errorFunc)
raise exec(errorFunc)
执行此操作时出现错误
TypeError: exceptions must derive from BaseException
根据我在这里阅读的内容:Error exception must derive from BaseException even when it does (Python 2.7)
看来我必须将其声明为 class。无论如何要解决这个问题?
根据python,您提出的问题也不例外:
>>> type(exec("ValueError('ABC')"))
<class 'NoneType'>
您需要重写代码才能拥有:
>>> errorFunc = "ValueError('ABC')"
>>> exec('raise ' + errorFunc)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
ValueError: ABC