2011-01-13 19 views
5

मेरे पास निम्न कोड है:OSError की फ़ाइल नाम विशेषता अनुपलब्ध है?

except(OSError) as (errno, strerror, filename): 
print "OSError [%d]: %s at %s" % (errno, strerror, filename) 

यह तब तक बढ़िया चलता है जब तक कि यह OSError num को पूरा न करे। 123 (The file name, directory name, or volume label syntax is incorrect)। तो मुझे कोड लाइन को छोड़कर निम्न त्रुटि मिलती है:

ValueError: need more than 2 values to unpack 

यह filename विशेषता का उपयोग न करके हल किया जाता है। हालांकि मेरी आवश्यकताएं मुझे इस विशेषता का उपयोग न करने से रोकती हैं।

क्या कोई और तरीका है?

उत्तर

24

मैंने इस प्रकार की अपवाद प्रबंधन को नहीं देखा है जहां आप अपवाद वस्तु के गुणों को खंड के रूप में पारित कर रहे हैं।

आम तौर पर आप except ExceptionObject as e को संभालते हैं और विशेषताओं को संभालते हैं क्योंकि एक सामान्य रूप से किसी ऑब्जेक्ट के गुणों को संभालता है।

ओएसईआरआरआर में एक त्रुटि विशेषता है जो त्रुटि से एक संख्यात्मक त्रुटि कोड है, और स्ट्रेरर विशेषता संबंधित स्ट्रिंग है और अपवादों के लिए जिसमें फ़ाइल सिस्टम पथ (जैसे chdir() या unlink()) शामिल है, अपवाद उदाहरण होगा एक तीसरा विशेषता, फ़ाइल नाम, जो फ़ंक्शन को पास किया गया फ़ाइल नाम है।

import os 
try: 
    os.chdir('somenonexistingdir') 
except OSError as e: 
    print e.errno 
    print e.filename 
    print e.strerror 
+9

"मैंने इस प्रकार की अपवाद प्रबंधन को नहीं देखा है" = यह कहने का सबसे अच्छा तरीका है कि आप इसे गलत कर रहे हैं। – marr75

+0

धन्यवाद। इसने काम कर दिया! – Alex58

संबंधित मुद्दे