gpt4 book ai didi

Python XMLRPC : Handling arbitrary exceptions on client-side

转载 作者:行者123 更新时间:2023-12-01 06:18:17 26 4
gpt4 key购买 nike

我试图将任意异常从 XMLRPC 服务器传递到客户端(两个 Python 脚本,异常类型都在双方定义)。 ActiveState Recipes 有一个示例性的客户端实现。它解析返回的“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>

ActiveState 配方拆分“ValueError:”字符串,并将“ValueError”与 ValueError.__name__ 进行比较(位于 allowed_errors = [ValueError, TypeError] 中,参见上面的链接)。

是否可以像这样传递所有异常,即在客户端自动引发任何异常(从Exception或其他一些基类派生)(在它被调用之后)在服务器上提出)?

ActiveState 脚本可以工作,但我不想注册可能抛出的每一个异常(必须位于allowed_errors中)。

(额外问题:除了 XMLRPC 之外还有其他技术可以正确处理这个问题吗?Pyro?)

最佳答案

您可以从 __builtins__ 填充 allowed_errors 列表:

[exc for exc in __builtins__ if isinstance(exc, BaseException)]

这将处理常见情况,对于内置异常,例如 ValueErrorTypeErrorOSError 等。您可能可以做一些事情更高级,例如 PyYAML 和 pickle,它们会自动追捕发送的任何引用的异常,但这会让您面临恶意攻击。

如果您想要那种客户端/服务器透明性(即自动从客户端上的服务器引发异常),那么 Pyro 可能是比 XML-RPC 更好的选择。

关于Python XMLRPC : Handling arbitrary exceptions on client-side,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2044904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com