2013-08-11 13 views
60

Jak mogę uzyskać nazwę wyjątku podniesionego w Pythonie?Jak uzyskać nazwę wyjątku złapaną w Pythonie?

np

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

Na przykład, ja wzrok wielu (lub wszystkie) wyjątki, a chcesz drukować nazwę wyjątku w komunikacie o błędzie.

+2

* Dlaczego * Czy myślę, że nie d to? Dlaczego nie złapać bardziej konkretnego wyjątku (np. 'Z wyjątkiem NameError:') na początek? – delnan

+3

Mam kilka scenariuszy, w których chcę przechwycić wszystkie wyjątki (lub ich listę) i chcę wydrukować nazwę wyjątku w komunikacie o błędzie. –

+1

Możesz chcieć sprawdzić standardowy moduł biblioteczny ['traceback'] (https://docs.python.org/3/library/traceback.html), który ma funkcje pozwalające na wygodne formatowanie wyjątków i tracebacków. – Blckknght

Odpowiedz

106

Oto dwa różne sposoby, aby uzyskać nazwę wyjątek:

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

np

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

Idealny! Dzięki @Tim! –

0

To działa, ale wydaje się, że musi być łatwiejszy, bardziej bezpośredni sposób?

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

Zastąp symbol 'except Exception as exception' typem wyjątku, który chcesz przechwycić, tj.' Z wyjątkiem NameError jako wyjątku'. –

Powiązane problemy