如何在Python代码中引发Suds.WebFault?
我想在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