Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XMLRPC:在客户端处理任意异常_Python_Xml Rpc_Xmlrpclib - Fatal编程技术网

Python XMLRPC:在客户端处理任意异常

Python XMLRPC:在客户端处理任意异常,python,xml-rpc,xmlrpclib,Python,Xml Rpc,Xmlrpclib,我试图将任意异常从XMLRPC服务器传递到客户机(Python脚本和异常类型都在两侧定义)。有一个示例性的客户端实现,解析返回的“faultString”,将其与已知异常列表进行比较,如果发现,则引发该异常(而不是将其包装在xmlrpclib.Fault中) XMLRPC异常响应的示例: <?xml version='1.0'?> <methodResponse> <fault> <value> <struct>

我试图将任意异常从XMLRPC服务器传递到客户机(Python脚本和异常类型都在两侧定义)。有一个示例性的客户端实现,解析返回的“faultString”,将其与已知异常列表进行比较,如果发现,则引发该异常(而不是将其包装在
xmlrpclib.Fault
中)

XMLRPC异常响应的示例:

<?xml version='1.0'?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value>
            <int>1</int>
          </value>
        </member>
        <member>
          <name>faultString</name>
          <value>
            <string>ValueError:</string>
          </value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

故障码
1.
断层串
值错误:
ActiveState配方拆分“ValueError:”字符串,并将“ValueError”与
ValueError进行比较。\uuuuu name\uuuuuuuuuu
(位于
allowed\u errors=[ValueError,TypeError]
,参见上面的链接)

是否可以像这样传递所有异常,即在客户端(在服务器上引发异常后)自动引发任何异常(源自
异常
或其他一些基类)

ActiveState脚本可以工作,但我不想注册可能引发的每个异常(必须在
允许的\u错误中)


(附加问题:除了XMLRPC之外,还有其他技术可以正确处理此问题吗?Pyro?

您可以从
\uuuuuuu内置文件中填充
允许的\u错误
列表:

[exc for exc in __builtins__ if isinstance(exc, BaseException)]
这将处理常见的情况,例如
ValueError
TypeError
OSError
,等等。您可能会执行一些更高级的操作,如PyYAML和pickle,它们会自动查找发送的任何引用异常,但这会使您面临恶意攻击


如果您想要客户机/服务器的透明度,即自动从客户机上的服务器引发异常意味着什么,那么Pyro可能是比XML-RPC更好的选择。

我认为第一个建议不起作用,因为我有很多自定义异常类型。也许我会在接下来的几天里尝试一下烟火。