Wie kann ich den Namen einer Ausnahme ermitteln, die in Python ausgelöst wurde?
z.B,
try:
foo = bar
except Exception as exception:
name_of_exception = ???
assert name_of_exception == 'NameError'
print "Failed with exception [%s]" % name_of_exception
Zum Beispiel fange ich mehrere (oder alle) Ausnahmen ab und möchte den Namen der Ausnahme in einer Fehlermeldung drucken.
python
exception
exception-handling
Rob Bednark
quelle
quelle
except NameError:
) einfangen ?traceback
Modul der Standardbibliothek ausprobieren, das Funktionen enthält, mit denen Ausnahmen und Rückverfolgungen gut formatiert werden können.except
Anweisung behandelt, aber der Protokolleintrag ist in jedem Fall sehr ähnlich.Antworten:
Es gibt verschiedene Möglichkeiten, um den Namen der Klasse der Ausnahme abzurufen:
type(exception).__name__
exception.__class__.__name__
exception.__class__.__qualname__
z.B,
quelle
Das funktioniert, aber es scheint, dass es einen einfacheren und direkteren Weg geben muss?
quelle
except Exception as exception
durch die Art der Ausnahme, die Sie abfangen möchten, zexcept NameError as exception
.Sie können auch verwenden
sys.exc_info()
.exc_info()
gibt 3 Werte zurück: Typ, Wert, Rückverfolgung. Zur Dokumentation: https://docs.python.org/3/library/sys.html#sys.exc_infoquelle
Wenn Sie den vollständig qualifizierten Klassennamen möchten (z. B.
sqlalchemy.exc.IntegrityError
statt nurIntegrityError
), können Sie die folgende Funktion verwenden, die ich aus MBs großartiger Antwort auf eine andere Frage übernommen habe (ich habe nur einige Variablen umbenannt, um sie meinem Geschmack anzupassen):Beispiel:
quelle
Die anderen Antworten hier eignen sich hervorragend für Erkundungszwecke. Wenn das Hauptziel jedoch darin besteht, die Ausnahme (einschließlich des Namens der Ausnahme) zu protokollieren, sollten Sie möglicherweise logging.exception anstelle von print verwenden.
quelle