2011-12-20 22 views
13

foo में अपवाद द्वारा अपवाद क्यों है, लेकिन bar में अपवाद उठाया गया है?पायथन कोशिश-अंत में

def foo(): 
    try: 
     raise Exception('foo') 
    finally: 
     return 

def bar(): 
    try: 
     raise Exception('bar') 
    finally: 
     pass 

foo() 
bar() 
+5

डुप्लिकेट [वापसी अपवाद अपवाद] (http://stackoverflow.com/questions/517060/return-eats-exception) – gecco

उत्तर

19

Python documentation से:

अंत में खंड एक और अपवाद को जन्म देती है या रिटर्न या तोड़ने के बयान निष्पादित करता है, तो बचा लिया अपवाद खो दिया है।

+1

दिलचस्प! यह कहां जाता है, अगर वह प्रश्न भी समझ में आता है? – wim

+5

@ विम: यह लगता है कि जहां भी स्थानीय चर समारोह के अंत में जाते हैं, मुझे लगता है। इसे देखने का एक तरीका यह है कि 'आखिरकार' ब्लॉक के अंत में अपवाद फिर से उठाया जाता है। चूंकि 'रिटर्न' शेष 'आखिरकार' ब्लॉक को छोड़ देता है, इसलिए अपवाद को फिर से उठाना कभी नहीं होता है। – interjay

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

  • कोई संबंधित समस्या नहीं^_^