2011-03-05 7 views
11

यह Catching an exception while using a Python 'with' statement प्रश्न की निरंतरता है।
मैं काफी ई नौसिखिया हूं और मैंने जीएनयू/लिनक्स पर पायथन 3.2 के साथ निम्नलिखित कोड का परीक्षण किया।पायथन 'साथ' कथन का उपयोग करते समय अपवाद को पकड़ना - भाग 2

उपर्युक्त प्रश्न में, यह करने के लिए कुछ इसी तरह एक बयान 'के साथ' से एक अपवाद को पकड़ने के लिए प्रस्तावित किया गया था:

try: 
    with open('foo.txt', 'a'): 
     # 
     # some_code 
     # 
except IOError: 
    print('error') 

मुझे बनाता है कि आश्चर्य: क्या हुआ अगर some_code यह पकड़ने के बिना एक IOError उठाती होता है ? यह स्पष्ट रूप से बाहरी 'छोड़कर' कथन द्वारा पकड़ा गया है, लेकिन यह वास्तव में मैं नहीं चाहता था।
आप ठीक कह सकते हैं, बस कुछ और कोशिश के साथ कुछ_code लपेटें- और इसी तरह, लेकिन मुझे पता है कि अपवाद हर जगह से आ सकते हैं और कोड के हर टुकड़े की रक्षा करना असंभव है।
समेकित करने के लिए, मैं बस 'त्रुटि' प्रिंट करना चाहता हूं अगर केवल अगर (ओपन '' foo.txt ',' a ') अपवाद उठाता है, तो मैं यहां पूछने के लिए हूं कि निम्नलिखित कोड मानक सुझाए गए क्यों नहीं हैं ऐसा करने का तरीका:

try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 

with f: 
    # 
    # some_code 
    # 

#EDIT: 'else' statement is missing, see Pythoni's answer 

धन्यवाद!

उत्तर

13
try: 
    f = open('foo.txt', 'a') 
except IOError: 
    print('error') 
else: 
    with f: 
     # 
     # some_code 
     # 
+1

आप बिल्कुल सही हैं, मैं 'अन्य' के तहत 'साथ' रखना भूल गया। – kynikos

+0

वैसे भी मेरा मुख्य प्रश्न यह था कि मेरा अनुमान सही था: अन्य पुराने प्रश्न को दिए गए उत्तर वास्तव में इस विधि से भी बदतर थे? – kynikos

+0

ठीक है, मुझे लगता है कि इस मामले में अपवाद को संभालने का यह सबसे अच्छा तरीका है, इसलिए यह मेरा स्वीकार्य उत्तर है। हो सकता है कि आप इसे किसी अन्य प्रश्न में भी कॉपी कर सकें http://stackoverflow.com/questions/713794/catching-an-exception-while-using-a-python-with-statement – kynikos

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