在SimpleXMLRPCServer上发送异常
我在一个简单的XMLRPC服务器上想要抛出一个异常,但是每次尝试后,客户端都会收到一个“Fault 1”的异常。
RPC_Server.AbortTest() 文件 "C:\Python25\lib\xmlrpclib.py",第1147行,在 call 中 返回 self.__send(self.__name, args) 文件 "C:\Python25\lib\xmlrpclib.py",第1437行,在 __request 中 verbose=self.__verbose 文件 "C:\Python25\lib\xmlrpclib.py",第1201行,在 request 中 返回 self._parse_response(h.getfile(), sock) 文件 "C:\Python25\lib\xmlrpclib.py",第1340行,在 _parse_response 中 返回 u.close() 文件 "C:\Python25\lib\xmlrpclib.py",第787行,在 close 中 抛出 Fault(**self._stack[0]) xmlrpclib.Fault: :测试被RPC请求中止了">
2 个回答
如果你像这样抛出一个异常:
raise Exception('Help!')
在服务器上,你在客户端收到的异常信息的内容,会和对原始异常执行 str() 方法的结果一样,只不过前面会加上这个异常类型的字符串表示。
我得到的消息内容是:
<type 'exceptions.Exception'>:Help!
你当然可以解析这个信息,以获取你需要的内容。
是的,当你在服务器端抛出一个异常时,就会发生这种情况。你是希望SimpleXMLRPCServer把这个异常返回给客户端吗?
你只能使用那些可以通过XML传输的对象。具体来说,包括:
- 布尔值:就是True和False这两个常量
- 整数:直接传入
- 浮点数:直接传入
- 字符串:直接传入
- 数组:任何包含符合条件元素的Python序列类型。数组会作为列表返回
- 结构体:一个Python字典。字典的键必须是字符串,值可以是任何符合条件的类型。用户自定义类的对象也可以传入;但只会传输它们的
__dict__
属性。 - 日期:以自1970年1月1日以来的秒数表示(传入一个DateTime类的实例)或者一个datetime.datetime实例。
- 二进制数据:传入一个Binary包装类的实例