2013-08-11 7 views
60

पायथन में उठाए गए अपवाद का नाम मैं कैसे प्राप्त कर सकता हूं?पायथन में पकड़े गए अपवाद का नाम कैसे प्राप्त करें?

जैसे

try: 
    foo = bar 
except Exception as exception: 
    name_of_exception = ??? 
    assert name_of_exception == 'NameError' 
    print "Failed with exception [%s]" % name_of_exception 

उदाहरण के लिए, मैं कई (या सभी) को पकड़ने हूँ अपवाद हैं, और एक त्रुटि संदेश में अपवाद के नाम प्रिंट करना चाहते हैं।

+2

* आप क्यों * करना आपको लगता है डी यह? एक और ठोस अपवाद क्यों नहीं पकड़ें (उदा। नाम 'त्रुटि को छोड़कर:') से शुरू करने के लिए? – delnan

+3

मेरे पास कुछ परिदृश्य हैं जहां मैं सभी अपवाद (या उनमें से एक सूची) पकड़ना चाहता हूं, और एक त्रुटि संदेश में अपवाद का नाम मुद्रित करना चाहता हूं। –

+1

आप मानक लाइब्रेरी के ''ट्रेसबैक'] (https://docs.python.org/3/library/traceback.html) मॉड्यूल को देखना चाहेंगे, जिसमें ऐसे कार्य हैं जो अपवादों और ट्रेसबैक के कुछ अच्छे स्वरूपण करते हैं। – Blckknght

उत्तर

106

यहाँ अपवाद के नाम प्राप्त करने के लिए दो अलग-अलग तरीके हैं:

  1. type(exception).__name__
  2. exception.__class__.__name__

जैसे,

try: 
    foo = bar 
except Exception as exception: 
    assert type(exception).__name__ == 'NameError' 
    assert exception.__class__.__name__ == 'NameError' 
+0

बिल्कुल सही! धन्यवाद @ टिम! –

0

यह काम करता है, लेकिन ऐसा लगता है कि एक आसान, अधिक प्रत्यक्ष तरीका होना चाहिए?

try: 
    foo = bar 
except Exception as exception: 
    assert repr(exception) == '''NameError("name 'bar' is not defined",)''' 
    name = repr(exception).split('(')[0] 
    assert name == 'NameError' 
+1

अपवाद के प्रकार के साथ अपवाद के रूप में अपवाद को छोड़कर बदलें जिसे आप पकड़ना चाहते हैं, यानी 'नाम के रूप में नाम त्रुटि को छोड़कर'। –

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

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