2013-11-04 6 views
5

अजगर में, मैं दो तरीकोंअपवाद वर्ग और अपवाद उदाहरण को बढ़ाने के बीच कोई अंतर है?

raise ValueError 
raise ValueError() 
अलग तथ्य यह है कि आप बाद के मामले में अपवाद संदेश की आपूर्ति कर सकते से

में एक अपवाद को बढ़ा सकते हैं, वहाँ इन दोनों शैलियों के बीच किसी भी मौलिक अंतर है? क्या मुझे एक दूसरे को चुनना चाहिए?

+2

आप एक वर्ग बढ़ा देते हैं, यह प्रभावी रूप में बदला न गया 'कक्षा() जुटाने' (जैसे, कोई पैरामीटर के साथ बनाया), लेकिन मैं कर सकते हैं ' इस समय एक संदर्भ नहीं मिला ... –

+0

संदर्भ: http://docs.python.org/3/reference/simple_stmts.html#the-raise-statement – alko

+0

@alko yup ... 'अन्यथा, पहले मूल्यांकन का मूल्यांकन करें अपवाद वस्तु के रूप में अभिव्यक्ति। यह या तो सबक्लास या बेसएक्सप्शन का एक उदाहरण होना चाहिए। यदि यह एक वर्ग है, तो बिना किसी तर्क के कक्षा को तुरंत चालू करके आवश्यक अपवाद उदाहरण प्राप्त किया जाएगा। 'यह सब कुछ कहता है –

उत्तर

5
the doc से

दोनों (कोई अनपेक्षित व्यवहार) मान्य हैं:

बढ़ाने के लिए एकमात्र तर्क इंगित करता है अपवाद उठाया जा। यह या तो एक अपवाद उदाहरण या अपवाद वर्ग (एक वर्ग जो अपवाद से निकला है) होना चाहिए।

मेरी राय में, एक उदाहरण या कस्टम डेटा या जो कुछ भी इस्तेमाल किया जा करने की जरूरत है अगर आप इसे डेटा रखने के लिए चाहते हैं, यह एक संदेश है कि क्या है (जैसा कि आपने कहा था)।

@alko के रूप में कहा, यदि आप कोई उदाहरण नहीं देते हैं तो यह किसी भी तर्क के साथ तत्काल होगा।

इस अगर आप एक अनिवार्य तर्क की जरूरत है काम नहीं करेगा:

>>> class MyError(Exception): 
... def __init__(self, message, data=None): 
...  self.msg = message 
...  self.data = data or {} 
... 
>>> raise MyError 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: __init__() takes at least 2 arguments (1 given) 
5

टिप्पणियों को सारांशित करने के लिए: कोई अंतर नहीं है। या तो वाक्यविन्यास ValueError उदाहरण फेंक देगा। प्रासंगिक excerpt from the docs:

यदि यह एक वर्ग है, अपवाद उदाहरण है जब कोई तर्क के साथ वर्ग instantiating द्वारा जरूरत प्राप्त की जाएगी।

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