如何在Python代码中引发Suds.WebFault?

6 投票
3 回答
7427 浏览
提问于 2025-04-16 15:39

我想在Python代码中引发一个Suds.WebFault错误。这个__init__方法,也就是构造函数,需要三个参数__init__(self, fault, document)。其中,fault有两个属性:fault.faultcode和fault.detail。我试了很多方法,就是找不到fault属于哪个类。请问我该如何在Python代码中引发Suds.WebFault类型的异常呢?

提前谢谢你。

3 个回答

0

WebFault 这个东西其实是用来处理当网络服务器返回一个 <Fault> 元素时的情况。所以,自己主动去触发这个错误可能不是个好主意。

如果你还是想这么做,我建议你先看看框架是在哪段代码里触发这个错误的:https://github.com/unomena/suds/blob/4e90361e13fb3d74915eafc1f3a481400c798e0e/suds/bindings/binding.py#L182 - 然后从那段代码往回推。

3

WebFault是在 suds.__init__.py 文件中定义的,具体内容如下:

class WebFault(Exception):
    def __init__(self, fault, document):
        if hasattr(fault, 'faultstring'):
            Exception.__init__(self, u"Server raised fault: '%s'" %
                fault.faultstring)
        self.fault = fault
        self.document = document

所以,要想抛出一个带有有意义信息的WebFault,你需要把一个对象作为第一个参数传进去,这个对象里包含了信息。如果没有特别要求,Document可以简单地用 None 来表示。

import suds

class Fault(object): 
    faultstring = 'my error message'

raise suds.WebFault(Fault(), document=None)
6

我不太确定你具体在问什么,但你可以使用以下方法来抛出一个网络错误:

import suds

try:
    client.service.Method(parameter)
except suds.WebFault, e:
    print e

撰写回答