2011-10-10 10 views
28

मैं पाइथन के लिए नया हूं। मैं सिर्फ यह जानना चाहता हूं कि finally को except ब्लॉक में कॉल करने के बाद ब्लॉक क्यों निष्पादित कर रहा है?ब्लॉक को छोड़कर sys.exit (0) को कॉल करने के बाद आखिरकार ब्लॉक क्यों निष्पादित हो रहा है?

कोड:।

import sys 

def sumbyzero(): 
    try: 
     10/0 
     print "It will never print" 
    except Exception: 
     sys.exit(0) 
     print "Printing after exit" 
    finally: 
     print "Finally will always print" 

sumbyzero() 

Btw, मैं सिर्फ जावा, जहां finally ब्लॉक नहीं मार डाला है जब System.exit(0)catch ब्लॉक में है के रूप में एक ही बात करने के लिए कोशिश कर रहा था।

उत्तर

60

सभी sys.exit() प्रकार SystemExit का अपवाद उठाता है।

documentation से: अजगर से

से बाहर निकलें। यह SystemExit अपवाद उठाकर कार्यान्वित किया गया है, इसलिए try बयानों के खंडों को निर्दिष्ट किया गया है, और बाहरी स्तर पर प्रयास से बाहर निकलना संभव है।

आप निम्नलिखित चलाते हैं, तो आप खुद के लिए देखेंगे:

import sys 
try: 
    sys.exit(0) 
except SystemExit as ex: 
    print 'caught SystemExit:', ex 

एक विकल्प के रूप में, os._exit() सफाई के ज्यादा दरकिनार प्रक्रिया रुक जाएगी, finally ब्लॉक आदि

+0

+1 आपके अच्छे स्पष्टीकरण @ Aix के लिए +1 – Reuben

4

सहित आपके उदाहरण के बारे में:

एक अंतिम खंड हमेशा कोशिश कथन छोड़ने से पहले निष्पादित किया जाता है, चाहे कोई अपवाद हुआ हो या नहीं।

यह Error and Exceptions पायथन डॉक्स का हिस्सा है। तो - आपका आखिरी ब्लॉक हमेशा निष्पादित किया जाएगा उदाहरण में आप तब तक दिखाएंगे जब तक आप os._exit() का उपयोग नहीं करेंगे। लेकिन आपको इसे बुद्धिमानी से उपयोग करना चाहिए ...

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

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