2013-05-23 20 views
41

एक parameterless अपवाद निर्धारित करना:क्या ब्रांड्स के बिना "अपवाद()" और "अपवाद बढ़ाएं" के बीच कोई अंतर है?

class myException(Exception): 
    pass 

जब उठाया, वहाँ के बीच कोई अंतर नहीं है:,

raise myException 

और

raise myException() 

जब कोशिश कर रहा कोई भी मिल सकता है - यह बस एक है अधिभारित वाक्यविन्यास? डॉक्स 6.9. The raise statement
यह myException

+0

आपको '()' जैसे नाम 'त्रुटि' ('HiThere') जैसे कुछ तर्क पारित करने की आवश्यकता हो सकती है [8.4। अपवादों को बढ़ाना] (http://docs.python.org/2/tutorial/errors.html#raising-exceptions) –

+0

@GrijeshChauhan: मुझे लगता है कि प्रश्न 'नाम Error' बनाम' नाम Error() 'बढ़ाने के बारे में है। – Blender

+0

@ ब्लेंडर हां मैंने अभी प्रश्न को समझ लिया है, मैं भी नया शिक्षार्थी हूं :) –

उत्तर

37

संक्षिप्त उत्तर का एक उदाहरण पैदा कर रही है में उठाने कीवर्ड पर

+6

पहला फॉर्म (बिना ब्रांड्स के) माइक्रोस्कोपिक रूप से तेज़ क्यों होगा? – jamesdlin

6

जाओ देखो कि दोनों raise MyException और raise MyException() एक ही बात करते हैं। यह पहला फॉर्म ऑटो आपके अपवाद को तुरंत चालू करता है।

relevant section from the docs कहते हैं, "उठाने अपवाद वस्तु के रूप में पहली अभिव्यक्ति मूल्यांकन करता है। यह या तो एक उपवर्ग या BaseException का एक उदाहरण होना चाहिए। यदि यह एक वर्ग है, अपवाद उदाहरण जब जरूरत प्राप्त की जाएगी instantiating द्वारा बिना तर्क के वर्ग। "

यह कहा गया है कि भले ही अर्थशास्त्र समान हैं, पहला रूप सूक्ष्म रूप से तेज़ है, और दूसरा रूप अधिक लचीला है (क्योंकि यदि आवश्यक हो तो आप इसे तर्क दे सकते हैं)।

सामान्य शैली जो कि अधिकांश लोग पाइथन (यानी मानक पुस्तकालय में, लोकप्रिय अनुप्रयोगों में और कई पुस्तकों में) में उपयोग करते हैं, कोई तर्क नहीं होने पर raise MyException का उपयोग करना है। जब लोग कुछ तर्क पारित करने की आवश्यकता होती है तो लोग केवल अपवाद को तुरंत चालू करते हैं। उदाहरण के लिए: raise KeyError(badkey)

+0

यह ध्यान देने योग्य है कि [raise 'के लिए वाक्यविन्यास] (http://docs.python.org/3/reference/simple_stmts.html#raise) पाइथन 3 में थोड़ा सा बदल गया है। इस प्रश्न के लिए प्रासंगिक भाग है वैसे ही ('अपवाद टाइप टाइप' अभी भी किसी भी तर्क के साथ अपने कन्स्ट्रक्टर को कॉल करके प्रकार का एक उदाहरण बनाता है)। – Blckknght

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