2013-08-11 15 views
60

Python'da yükseltilen bir özel durumun adını nasıl alabilirim?Python'da yakalanan istisnanın adı nasıl alınır?

örneğin

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

Örneğin, ben birden yakalıyorum (veya tüm) istisnalar ve bir hata mesajıyla istisna adını yazdırmak istiyorum.

+2

* Neden * öyle mi seni düşünüyorum d bu? Neden başlamak için daha somut bir istisna (ör. NameError: 'dışında) yakalamıyoruz? – delnan

+3

Tüm istisnaları (veya bunların bir listesini) yakalamak ve bir hata mesajında ​​istisnanın adını yazdırmak istediğim birkaç senaryo var. –

+1

Standart kütüphanenin ['traceback'] (https://docs.python.org/3/library/traceback.html) modülüne göz atmak isteyebilirsiniz; bu, bazı istisnai durumları ve geri bildirimleri biçimlendiren işlevlere sahiptir. – Blckknght

cevap

106

İşte istisna adını almak için iki farklı yol vardır:

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

örneğin

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

Mükemmel! Teşekkürler @Tim! –

0

Bu, ancak daha kolay, daha doğrudan bir yol olmalı gibi görünüyor?

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

'İstisna olarak istisnai hariç 'yerine, yakalamak istediğiniz istisna türünü, ör. NameError istisnası olarak hariç. –

İlgili konular