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 no válida, aparece un error. El código que estoy usando está debajo seguido por el error que estoy recibiendo.Error al manejar en Python con 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()
El error es el siguiente:
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 que debería usar aquí. ¿Alguien sabe cómo detectar este error? La coordenada x con el valor 400 está en grados, por eso ocurre el error.
Gracias
Bien He encontrado la solución. En SUDS si ingresa:
faults=False
en la definición del cliente, esto detecta fallas y da la razón por la cual ocurrió la falla. La línea debe decir:
client = Client('http://file.wsdl', faults=False)
el post que he marcado como la respuesta correcta es también capaz de atrapar un problema que ha sucedido.
Gracias a todos
he puesto faltas = False y trató de coger suds.WebFault, pero aún así conseguir que el error "No hay manipuladores hemos encontrado nada con logger 'suds.client' –