用SUDS在Python中处理错误

用SUDS在Python中处理错误,python,web-services,suds,Python,Web Services,Suds,我一直在尝试使用肥皂水通过wsdl文件控制摄像头。我已经让代码工作,但我想把错误处理放入脚本中。我尝试了不同的异常,但无法使脚本正常工作。当我输入一个无效的坐标时,我会得到一个错误。下面是我使用的代码,后面是我收到的错误 #!/home/build/Python-2.6.4/python import suds from suds.client import Client ############################################################

我一直在尝试使用肥皂水通过wsdl文件控制摄像头。我已经让代码工作,但我想把错误处理放入脚本中。我尝试了不同的异常,但无法使脚本正常工作。当我输入一个无效的坐标时,我会得到一个错误。下面是我使用的代码,后面是我收到的错误

#!/home/build/Python-2.6.4/python

import suds
from suds.client import Client

####################################################################
#
#   Python SUDS Script that controls movement of Camera
#
####################################################################
#
#                    Absolute Move Function
#
####################################################################

def absoluteMove():

    # connects to WSDL file and stores location in variable 'client'
    client = Client('http://file.wsdl')

    # Create 'token' object to pass as an argument using the 'factory' namespace
    token = client.factory.create('ns4:ReferenceToken')
    print token

    # Create 'dest' object to pass as an argument and values passed to this object
    dest = client.factory.create('ns4:PTZVector')
    dest.PanTilt._x=400
    dest.PanTilt._y=0
    dest.Zoom._x=1
    print dest

    # Create 'speed' object to pass as an argument and values passed to this object
    speed = client.factory.create('ns4:PTZSpeed')
    speed.PanTilt._x=0
    speed.PanTilt._y=0
    speed.Zoom._x=1
    print speed

    # 'AbsoluteMove' method invoked passing in the new values entered in the above objects

    try:
        result = client.service.AbsoluteMove(token, dest, speed)
    except RuntimeError as detail:
        print 'Handling run-time error:', detail

    print "absoluteMove result ", result

result = absoluteMove() 
错误如下:

No handlers could be found for logger "suds.client"
Traceback (most recent call last):
  File "ptztest.py", line 48, in <module>
    if __name__ == '__main__': result = absoluteMove()    
  File "ptztest.py", line 42, in absoluteMove
    result = client.service.AbsoluteMove(token, dest, speed)
  File "build/bdist.linux-i686/egg/suds/client.py", line 537, in __call__
  File "build/bdist.linux-i686/egg/suds/client.py", line 597, in invoke
  File "build/bdist.linux-i686/egg/suds/client.py", line 632, in send
  File "build/bdist.linux-i686/egg/suds/client.py", line 683, in failed
  File "build/bdist.linux-i686/egg/suds/bindings/binding.py", line 235, in get_fault
suds.WebFault: Server raised fault: 'Error setting requested pan'
在客户机定义中,它捕获故障并给出故障发生的原因。该行应为:

client = Client('http://file.wsdl', faults=False)
我标记为正确答案的帖子也能够捕捉到问题已经发生


谢谢大家

你需要通过追踪的外观来捕捉。错误本身似乎是合法的,即,您的请求正在正确执行,但在给定的上下文中,您的参数可能是错误的。

如果您想捕获该异常,应该将

try:
    result = client.service.AbsoluteMove(token, dest, speed)
except suds.WebFault as detail:
    ...

我相信你在评论中提到了一个无害的诊断信息。我可以通过将
logging.INFO
分配给
basicConfig
logging.CRITICAL
分配给
suds.client
来抑制来自suds调用
logging.error()
的消息


如果您处理了代码中的所有异常和错误,并且代码工作正常,但您仍然可以通过正确的输出获得下面的消息

Msg:“找不到记录器
suds.client
的处理程序”

那么一个简单的解决方案就是添加这一行

logging.getLogger('suds.client').setLevel(logging.CRITICAL)

在导入语句之后的
yourclient.py
文件中。

我将faults=False并尝试捕获suds.WebFault,但仍然得到错误“找不到记录器的处理程序”suds.client别忘了:
导入日志记录
如果删除了客户端调试,则无法解决问题。要运行suds.client日志记录工具,必须首先执行logging.basicConfig调用。例如:
logging.basicConfig(level=logging.INFO)
try:
    result = client.service.AbsoluteMove(token, dest, speed)
except suds.WebFault as detail:
    ...