2015-01-17 13 views
6

Python 2 documentation कहता है कि "प्रोग्रामर को अपवाद वर्ग या इसके उप-वर्गों में से नए अपवाद प्राप्त करने के लिए प्रोत्साहित किया जाता है, न कि बेसएक्सप्शन से।" क्यों आगे के स्पष्टीकरण के बिना।पायथन में बेसएक्सप्शन क्लास के बजाय अपवाद से प्राप्त करने की अनुशंसा क्यों की जाती है?

मुझे उत्सुकता है कि इस तरह इसकी अनुशंसा क्यों की जाती है? क्या यह सिर्फ exceptions hierarchy को संरक्षित करने के लिए है क्योंकि पाइथन डेवलपर्स ने इसे कल्पना की है?

>>> dir(BaseException) == dir(Exception) 
True 
+2

[पीईपी 352] (https://www.python.org/dev/peps/pep-0352/) काफी कुछ बताता है। –

उत्तर

10

अपवाद BaseException से प्राप्त कर रहे हैं: GeneratorExit, KeyboardInterrupt, SystemExit

प्रलेखन के अनुसार:

  • GeneratorExit: उठा हुआ है जब एक जनरेटर के करीबी() विधि कहा जाता है। यह मानक त्रुटि के बजाय बेसएक्सप्शन से सीधे प्राप्त होता है क्योंकि यह तकनीकी रूप से एक त्रुटि नहीं है।
  • KeyboardInterrupt: जब उपयोगकर्ता इंटरप्ट कुंजी (आमतौर पर नियंत्रण-सी या हटाएं) हिट करता है तब उठाया जाता है। निष्पादन के दौरान, इंटरप्ट के लिए नियमित रूप से जांच की जाती है। अंतर्निहित फ़ंक्शन इनपुट() या raw_input() इनपुट के लिए इंतजार कर रहा है जब इंटरप्ट टाइप किया गया यह अपवाद भी उठाता है। अपवाद बेसएक्सप्शन से प्राप्त होता है ताकि गलती से कोड द्वारा पकड़ा जा सके जो अपवाद को पकड़ता है और इस प्रकार दुभाषिया को बाहर निकलने से रोकता है।
  • SystemExit: अपवाद मानक मानक या अपवाद के बजाय बेसएक्सप्शन से प्राप्त होता है ताकि यह गलती से कोड द्वारा पकड़ा न जाए जो अपवाद को पकड़ लेता है। यह अपवाद को उचित रूप से प्रसारित करने और दुभाषिया से बाहर निकलने का कारण बनता है।

    PEP 352 - Required Superclass for Exceptions कारण बताते हैं:

तो सामान्य कारणों try ... except Exception को रोकने के लिए गलती से दुभाषिया बाहर निकलने अश्विनी चौधरी की टिप्पणी को देखने के बाद रोकने (GeneratorExit को छोड़कर)

अद्यतन हैं।

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

except (KeyboardInterrupt, SystemExit): 
    raise 
except: 
    ... 

कि बेकार में स्पष्ट है। यह पीईपी कीबोर्ड इंटरप्ट और सिस्टम एक्सीट को बेसएक्सप्शन से सीधे प्राप्त करने का प्रस्ताव करता है।

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

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