2010-01-18 6 views
13

के साथ पायथन में त्रुटि हैंडलिंग मैं एसयूडीएस का उपयोग कर एक 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 के साथ एक्स समन्वय डिग्री में है इसलिए यही त्रुटि होती है।

धन्यवाद

ठीक है मुझे समाधान मिला है। साबुन का झाग में यदि आप दर्ज करें:

faults=False 

ग्राहक परिभाषा में, इस दोष फैल जाती है और कारण है कि गलती हुआ देता है। लाइन पढ़ना चाहिए:

client = Client('http://file.wsdl', faults=False) 

पोस्ट है कि मैं में चिह्नित किया है के रूप में सही जवाब भी पकड़ने के लिए कि एक समस्या हो गया है में सक्षम है।

धन्यवाद सभी

उत्तर

10

आपको लगता है कि अपवाद को पकड़ने के लिए चाहते हैं तो आप

try: 
    result = client.service.AbsoluteMove(token, dest, speed) 
except suds.WebFault as detail: 
    ... 
+1

मैं दोष डाल दिया है = झूठी और suds.WebFault को पकड़ने के लिए, लेकिन अभी भी उस त्रुटि हो रही कोशिश की suds.client " –

1

आपको लगता है कि ट्रैस बैक के दिखता द्वारा suds.WebFault को पकड़ने के लिए की जरूरत है। त्रुटि स्वयं वैध, आईई लगता है, आपके अनुरोध सही तरीके से निष्पादित किए जा रहे हैं, लेकिन शायद आपके पैरामीटर दिए गए संदर्भ में गलत हैं।

0

रखना चाहिए मेरा मानना ​​है कि यदि आप अपनी टिप्पणी में एक हानिरहित नैदानिक ​​संदेश का संदर्भ लें। मैं logging.INFObasicConfig और logging.CRITICAL से suds.client पर logging.error() पर कॉल करके सूड से संदेशों को दबा सकता हूं।

https://fedorahosted.org/suds/wiki/Documentation

15

आप अपने कोड में सभी अपवादों और त्रुटियों को संभाला और अपने कोड ठीक काम कर रहा है, लेकिन अभी भी आप अपने सही उत्पादन के साथ संदेश के नीचे मिल रहे हैं।

संदेश: "कोई संचालकों लकड़हारा suds.client के लिए पाया जा सकता है"

फिर एक सरल उपाय इस लाइन बस सभी आयात बयान के बाद

yourclient.py फ़ाइल में
logging.getLogger('suds.client').setLevel(logging.CRITICAL) 

जोड़ना है।

+8

" नहीं संचालकों लकड़हारा के लिए पाया जा सकता है "और भूल नहीं है: ' आयात यही हटा –

+3

logging' क्लाइंट डीबगिंग, यह समस्या को ठीक नहीं करता है। suds.client लॉगिंग सुविधा को चलाने के लिए, आपको पहले लॉगिंग करना होगा। basicConfig कॉल। उदाहरण: 'logging.basicConfig (level = logging.INFO) ' – FlipMcF