Я пытался управлять камерой через файл wsdl, используя SUDS. У меня есть работающий код, но я хочу поместить обработку ошибок в скрипт. Я пробовал разные исключения, но не могу заставить скрипт работать. Когда я ввожу неверную координату, я получаю ошибку. Код, который я использую ниже, сопровождается ошибкой, которую я получаю.
#!/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'
Я не уверен, какое исключение мне следует здесь использовать. Кто-нибудь знает, как отловить эту ошибку. Координата x со значением 400 указывается в градусах, поэтому возникает ошибка.
Спасибо
Хорошо, я нашел решение. В SUDS, если вы введете:
faults=False
в определении клиента, это ловит ошибки и дает причину, по которой произошла ошибка. В строке должно быть написано:
client = Client('http://file.wsdl', faults=False)
Пост, который я пометил как правильный ответ, также может обнаружить, что возникла проблема.
Спасибо всем