【问题标题】:Manually raising exceptions over Python XML-RPC通过 Python XML-RPC 手动引发异常
【发布时间】:2020-07-31 17:45:41
【问题描述】:

这个问题底部的解答!

在我的情况下,我的客户端将数据发送到服务器以执行 CPU 密集型工作负载。我希望我的 XML-RPC 服务器能够在输入数据出现问题时引发异常。

我在服务器端尝试了一个简单的raise Exception('description of the error'),但在我的客户端上,我得到:xmlrpc.client.Fault: <Fault 1: "<class 'TypeError'>:exceptions must derive from BaseException">

在客户端,我希望能够做到以下几点:

try:
    proxy.processData(data)
except:
    [... code to handle the exception ...]

在服务器端:

def processData(data):
    if 'somethingRequired' not in data:
        raise Exception('Something Required not in data!')
    [... continue processing ...]

我认为将异常设置为客户端的自定义类型也可能是理想的,这样由 XML-RPC 模块引起的异常(例如,无法连接到 XML-RPC 服务器)不会'不会被解释为数据输入错误。

谢谢!

更新:解决方案

在我的 processData 方法之上,我添加了以下内容(自定义异常):

class ProcessingError(Exception):
    pass

然后,在我的客户端代码中,我使用以下内容进行错误处理::

try:
    proxy.processData(data)
except xmlrpc.client.Fault as e:
    print(e.faultString)

请注意,如果您想区分自定义异常和来自 XML-RPC 模块的异常(如连接错误),您可以解析 except: 块中的 str(e) 以检查您的异常是否在错误中或不是。我上面的代码中没有。

xmlrpc.client.Fault 类有一些属性可以在here 中找到。

【问题讨论】:

    标签: python python-3.x xml-rpc


    【解决方案1】:

    在您的情况下可能需要引发自定义异常,Exception 正在尝试引用您可能缺少的父类。像这样的:

    class SomeSortOfException(Exception):
       pass
    

    这应该在processData()函数的顶部或之前。

    【讨论】:

    • 这有帮助,谢谢!我最终不得不在我的客户端代码中创建一些异常处理;我会尽快更新答案以包括在内。
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2010-09-08
    • 2012-02-10
    • 1970-01-01
    相关资源
    最近更新 更多