13
उठाती कोशिश ब्लॉक से अपवाद को ठीक

मैं इस तरह कुछ कोड है कहोअजगर:</p> <pre><code>try: try: raise Exception("in the try") finally: raise Exception("in the finally") except Exception, e: print "try block failed: %s" % (e,) </code></pre> <p>उत्पादन होता है: अगर अंत में ब्लॉक अपवाद

try block failed: in the finally 

कि प्रिंट बयान के बिंदु से, है कोशिश में उठाए गए अपवाद तक पहुंचने का कोई तरीका है, या यह हमेशा के लिए गायब हो गया है?

नोट: मेरे पास उपयोग में कोई मामला नहीं है; यह सिर्फ जिज्ञासा है। आम तौर पर आप सिर्फ इसका इस्तेमाल वैसे भी सफाई करने के लिए आदि -

उत्तर

14

मैं के बारे में इस बैकपोर्टेड किया गया है कि क्या कोई जानकारी प्राप्त नहीं कर सकते हैं और एक Py2 स्थापना आसान नहीं है, लेकिन अजगर 3, e में एक विशेषता e.__context__ कहा जाता है, ताकि:

try: 
    try: 
     raise Exception("in the try") 
    finally: 
     raise Exception("in the finally") 
except Exception as e: 
    print(repr(e.__context__)) 

देता है :

Exception('in the try',) 

PEP 3314 के अनुसार, इससे पहले कि __context__ जोड़ा गया है, मूल अपवाद के बारे में जानकारी उपलब्ध नहीं था।

+0

अच्छा, लेकिन केवल py3। वैसे भी: +1। – ch3ka

+1

आह, अच्छा। तो उस पीईपी के मुताबिक, जवाब है, "आप पी 2 में नहीं कर सकते, लेकिन आप पी 3 में कर सकते हैं"। धन्यवाद! – Claudiu

0
try: 
    try: 
     raise Exception("in the try") 
    except Exception, e: 
     print "try block failed" 
    finally: 
     raise Exception("in the finally") 
except Exception, e: 
    print "finally block failed: %s" % (e,) 

हालांकि, यह एक अच्छा विचार हो रही कोड कि finally ब्लॉक में एक अपवाद फेंक की संभावना है से बचने के लिए किया जाएगा।

+2

जो आखिरकार ब्लॉक में आने से पहले अपवाद को "" प्रयास में निगलता है। –