Ich weiß, dass print(e)
(wobei e eine Ausnahme ist) die aufgetretene Ausnahme druckt, aber ich habe versucht, das Python-Äquivalent von Java zu finden, das e.printStackTrace()
die Ausnahme genau auf die aufgetretene Zeile zurückführt und die gesamte Ablaufverfolgung druckt.
Könnte mir bitte jemand das Äquivalent von e.printStackTrace()
in Python sagen ?
java
python
exception
stack-trace
koool
quelle
quelle
format_exc
stattdessen eine Zeichenfolge abrufen.Es gibt auch
logging.exception
.Ausgabe:
(Von http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ über So drucken Sie den vollständigen Traceback ohne Programm anhalten? )
quelle
traceback.print_exc()
?In Java führt dies Folgendes aus ( Dokumente ):
Dies wird folgendermaßen verwendet:
In Java ist der Standardfehlerstrom ungepuffert, sodass die Ausgabe sofort eintrifft.
Die gleiche Semantik in Python 2 ist:
Python 3
In Python 3 können wir den Traceback direkt vom Ausnahmeobjekt abrufen (was sich für Thread-Code wahrscheinlich besser verhält). Außerdem ist stderr zeilengepuffert , aber die Druckfunktion erhält ein Flush-Argument, sodass dieses sofort an stderr gedruckt wird:
Fazit:
In Python 3 wird daher die Ausgabe gepuffert
traceback.print_exc()
, obwohl siesys.stderr
standardmäßig verwendet wird , und Sie können sie möglicherweise verlieren. Um in Python 3 eine möglichst gleichwertige Semantik zu erhalten, verwenden Sieprint
mitflush=True
.quelle
Zusätzlich zu den anderen großen Antworten, können wir die Python verwenden
logging
Bibliothekdebug()
,info()
,warning()
,error()
, undcritical()
Methoden. Zitieren aus den Dokumenten für Python 3.7.4 ,Dies bedeutet, dass Sie die Python-
logging
Bibliothek zum Ausgeben einerdebug()
oder eines anderen Nachrichtentyps verwenden können und dielogging
Bibliothek den Stack-Trace in ihre Ausgabe einbezieht. In diesem Sinne können wir Folgendes tun:Und es wird ausgegeben:
quelle