我正在开发一个通过网络服务器进行 RPC 调用的调度程序。webserver 类有一些方法,如 rpc_echo、rpc_add、...(以 rpc_ 为前缀),它们应该可以从远程访问。在调度程序方法中,我可以找到相应的方法并使用字典中准备好的参数调用它:
try:
handler = getattr(self, 'rpc_' + request['method']) # identify handler
response['result'] = handler(**params) # assign arguments and call handler
except (AttributeError, KeyError):
# exceptions: requested method -> key, call method -> attr, callable -> attr
raise JSONRPCError('unknown method.')
except TypeError:
raise JSONRPCError('parameters don\'t match method prototype.')
这工作正常:但是如果在处理程序内部抛出异常,错误检查就会受到干扰并导致错误的结论。如何确定异常是否在处理程序中引发?因此是错误的调用或服务器错误?