我一直在尝试使用SUDS通过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'
我不确定我应该在这里使用哪个例外。有谁知道如何捕获此错误。值为400的x坐标是度数,这就是错误发生的原因。
由于
好的,我找到了解决方案。在SUDS中,如果输入:
faults=False
进入客户端定义,这会捕获故障并说明故障发生的原因。该行应为:
client = Client('http://file.wsdl', faults=False)
我标记为正确答案的帖子也能够发现问题已经发生。
全部谢谢
答案 0 :(得分:15)
如果您处理了代码中的所有异常和错误,并且您的代码工作正常,但仍然会收到正确输出的消息。
Msg:“找不到记录器suds.client
”
然后一个简单的解决方案就是添加这一行
logging.getLogger('suds.client').setLevel(logging.CRITICAL)
在所有import语句之后的yourclient.py
文件中。
答案 1 :(得分:11)
如果你想捕获该异常,你应该把
try:
result = client.service.AbsoluteMove(token, dest, speed)
except suds.WebFault as detail:
...
答案 2 :(得分:1)
您需要通过该追溯的外观捕捉suds.WebFault
。错误本身似乎是合法的,IE,您的请求正在被正确执行,但在给定的上下文中您的参数可能是错误的。
答案 3 :(得分:0)
我相信你在评论中提到了一条无害的诊断信息。我可以通过将logging.error()
分配给logging.INFO
和basicConfig
分配给logging.CRITICAL
来取消来自呼叫suds.client
的suds的消息。