Manejo de errores en Python con SUDS
He estado tratando de controlar una cámara a través de un archivo wsdl usando SUDS. Tengo el código funcionando pero quiero colocar el manejo de errores en el script. He intentado diferentes excepciones pero no puedo hacer que el script funcione. Cuando ingreso una coordenada inválida, recibo un error. El código que estoy usando está debajo del error que estoy recibiendo.
#!/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()
El error está abajo:
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'
No estoy seguro de qué excepción debería usar aquí. Alguien sabe como atrapar este error. La coordenada x con el valor 400 está en grados, por eso ocurre el error.
Gracias
Está bien, he encontrado la solución. En SUDS si entras:
faults=False
en la definición del cliente, esto detecta fallas y da la razón por la que ocurrió la falla. La línea debe leer:
client = Client('http://file.wsdl', faults=False)
La publicación que he marcado como la respuesta correcta también puede detectar que ha ocurrido un problema.
Gracias a todos