python - Confused about try/except with custom Exception -


मेरा कोड:

  class AError (अपवाद): print 'error occur' i रेंज (3) में: प्रयास करें: प्रिंट '--- ऊ' एईआरआर को छोड़कर एईआरआर बढ़ाएं: प्रिंट 'एएर्रर' और प्राप्त करें: प्रिंट अंत में: 'आखिरकार' प्रिंट करें 'अंत में'  

जब मैं उपरोक्त कोड को चलाता हूं, आउटपुट यह है:

  त्रुटि उत्पन्न होती है --- ओओ अंत में एईआरआर प्राप्त करें --- ओओ अंत में एईर प्राप्त करें --- ओओरो अंत में एईआरआर प्राप्त करें   

मुझे लगता है कि स्ट्रिंग "त्रुटि उत्पन्न होती है" तीन बार होनी चाहिए, जैसे "--- oo" , लेकिन यह केवल एक बार होती है; क्यों?

स्पष्ट करने के लिए, यहां एक सरल उदाहरण है:

  class टेस्ट (ऑब्जेक्ट): प्रिंट "कक्षा परिभाषित किया जा रहा है" def __init __ (स्वयं): प्रिंट (उदाहरण के लिए) के लिए "इंस्टॉन्स बनाया जा रहा है": (3): t = test ()  

यह हो जाएगा:

  परिभाषित किया जा रहा वर्ग उदाहरण बना रहा है उदाहरण बनाया जा रहा है उदाहरण बनाया जा रहा है  

कोड वर्ग परिभाषा के भीतर लेकिन एक विधि def इंतिशिप के बाहर केवल एक बार चला जाता है, जब क्लास परिभाषित किया जाता है

यदि आप जब कभी भी एक उदाहरण बनता है चलाने के लिए कोड चाहते हैं, तो यह __ init __ उदाहरण विधि (या , कभी-कभी, __ नया __ वर्ग विधि )। हालांकि, ध्यान दें कि यदि आप उप-कक्षा के लिए __ init __ को परिभाषित करते हैं, तो आपको संभवतः यह सुनिश्चित करना चाहिए कि वह सुपरक्लास का __ init __ भी कहते हैं:

  class AError (अपवाद): def __init __ (आत्म, * आर्ग्स, ** kwargs): अपवाद .__ init __ (स्वयं, * आर्ग्स, ** kwargs) # कॉल सुपरक्लास प्रिंट 'त्रुटि' # अपने संदेश को प्रिंट करें  

यह सुनिश्चित करता है कि उपवर्ग सुपर क्लास के लिए तर्कों का समर्थन करता है; अपवाद के मामले में, आप कर सकते हैं उदा। एक त्रुटि संदेश पास करें:

  & gt; & gt; & gt; एईआरआर बढ़ाएं ("कुछ ग़लत हो गया है।") त्रुटि होती है # जब आपका संदेश ट्रेसबैक बनाया जाता है, तो आपका संदेश प्रिंट हो जाता है (सबसे हाल का कॉल अंतिम): फ़ाइल "& lt; pyshell # 11" gt; लाइन 1, & lt; मॉड्यूल & gt; उठाना AError ("कुछ गलत हो गया।") एईआर: कुछ गलत हो गया। # त्रुटि संदेश ट्रैसबैक से गुजरता है  

* args, ** kwargs वाक्यविन्यास के स्पष्टीकरण के लिए, अगर आप इसके बारे में परिचित नहीं हैं, तो देखें जैसे । सुपरक्लैश विधियों पर कॉल करने के लिए आप सुपर का भी उपयोग कर सकते हैं, उदा। ।


Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -