在SimpleXMLRPCServer上发送异常

0 投票
2 回答
778 浏览
提问于 2025-04-15 13:15

我在一个简单的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 个回答

0

如果你像这样抛出一个异常:

raise Exception('Help!')

在服务器上,你在客户端收到的异常信息的内容,会和对原始异常执行 str() 方法的结果一样,只不过前面会加上这个异常类型的字符串表示。

我得到的消息内容是:

<type 'exceptions.Exception'>:Help!

你当然可以解析这个信息,以获取你需要的内容。

1

是的,当你在服务器端抛出一个异常时,就会发生这种情况。你是希望SimpleXMLRPCServer把这个异常返回给客户端吗?

你只能使用那些可以通过XML传输的对象。具体来说,包括:

  • 布尔值:就是True和False这两个常量
  • 整数:直接传入
  • 浮点数:直接传入
  • 字符串:直接传入
  • 数组:任何包含符合条件元素的Python序列类型。数组会作为列表返回
  • 结构体:一个Python字典。字典的键必须是字符串,值可以是任何符合条件的类型。用户自定义类的对象也可以传入;但只会传输它们的__dict__属性。
  • 日期:以自1970年1月1日以来的秒数表示(传入一个DateTime类的实例)或者一个datetime.datetime实例。
  • 二进制数据:传入一个Binary包装类的实例

撰写回答