Jak mogę uzyskać nazwę wyjątku, który został zgłoszony w Pythonie?
na przykład,
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 łapię wiele (lub wszystkie) wyjątków i chcę wydrukować nazwę wyjątku w komunikacie o błędzie.
python
exception
exception-handling
Rob Bednark
źródło
źródło
except NameError:
na początek nie złapać bardziej konkretnego wyjątku (np. )?traceback
moduł biblioteki standardowej , który ma funkcje, które wykonują ładne formatowanie wyjątków i śledzenia.except
instrukcję, ale wpis dziennika jest bardzo podobny w każdym przypadku.Odpowiedzi:
Oto kilka różnych sposobów uzyskania nazwy klasy wyjątku:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
na przykład,
źródło
To działa, ale wydaje się, że musi być prostszy, bardziej bezpośredni sposób?
źródło
except Exception as exception
typem wyjątku, który chcesz złapać, tjexcept NameError as exception
.Możesz także użyć
sys.exc_info()
.exc_info()
zwraca 3 wartości: typ, wartość, śledzenie. Dokumentacja: https://docs.python.org/3/library/sys.html#sys.exc_infoźródło
Jeśli chcesz w pełni kwalifikowaną nazwę klasy (np.
sqlalchemy.exc.IntegrityError
Zamiast tylkoIntegrityError
), możesz użyć poniższej funkcji, którą zaczerpnąłem z niesamowitej odpowiedzi MB na inne pytanie (właśnie zmieniłem nazwy niektórych zmiennych, aby pasowały do moich upodobań):Przykład:
źródło
Inne odpowiedzi tutaj są świetne do celów eksploracyjnych, ale jeśli głównym celem jest zarejestrowanie wyjątku (łącznie z nazwą wyjątku), być może rozważ użycie logging.exception zamiast drukowania?
źródło