J'ai essayé de contrôler une caméra via un fichier wsdl en utilisant SUDS. J'ai le code qui fonctionne, mais je veux placer la gestion des erreurs dans le script. J'ai essayé différentes exceptions, mais je n'arrive pas à faire fonctionner le script. Lorsque j'entre une coordonnée invalide, j'obtiens une erreur. Le code que j'utilise est ci-dessous suivi de l'erreur que je reçois.Traitement des erreurs en Python avec 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()
L'erreur est ci-dessous:
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'
Je ne sais pas quelle exception que je devrais utiliser ici. Est-ce que quelqu'un sait comment attraper cette erreur. La coordonnée x avec la valeur 400 est en degrés c'est pourquoi l'erreur se produit.
Merci
Okay J'ai trouvé la solution. Dans SUDS, si vous entrez:
faults=False
dans la définition du client, cela permet de détecter les erreurs et d'indiquer la cause de la panne. La ligne devrait être:
client = Client('http://file.wsdl', faults=False)
Le poste que j'ai marqué comme la réponse correcte est également capable d'attraper qu'un problème est arrivé.
Merci à tous
J'ai mis des défauts = False et essayé d'attraper suds.WebFault, mais toujours obtenir cette erreur « Aucun gestionnaire n'a pu être trouvée pour enregistreur « suds.client » –