try:
something here
except:
print('the whatever error occurred.')
Wie kann ich den Fehler/die Ausnahme in meinem except:
blockieren?
try:
something here
except:
print('the whatever error occurred.')
Wie kann ich den Fehler/die Ausnahme in meinem except:
blockieren?
El traceback
Modul bietet Methoden für Formatierungs- und Druckausnahmen und ihre Rückverfolgungen, z.B. würde dies eine Ausnahme ausgeben, wie es der Standard-Handler tut:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
Output:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
logging
Anstelle der Verwendung der grundlegenden print()
Funktion, die flexiblere logging
Modul kann zur Protokollierung der Ausnahme verwendet werden. Das logging
Modul bietet eine Menge zusätzlicher Funktionen, z.B. die Protokollierung von Meldungen in eine bestimmte Protokolldatei, die Protokollierung von Meldungen mit Zeitstempeln und zusätzlichen Informationen darüber, wo die Protokollierung stattgefunden hat. (Für weitere Informationen besuchen Sie die offizielle Dokumentation .)
Die Protokollierung einer Ausnahme kann mit der Funktion auf Modulebene logging.exception()
etwa so:
import logging
try:
1/0
except BaseException:
logging.exception("An exception was thrown!")
Output:
ERROR:root:An exception was thrown!
Traceback (most recent call last):
File ".../Desktop/test.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
Anmerkungen:
die Funktion logging.exception()
sollte nur von einem Exception-Handler aufgerufen werden
die logging
Modul sollte nicht innerhalb eines Logging-Handlers verwendet werden, um eine RecursionError
(dank @PrakharPandey)
Es ist auch möglich, die Ausnahme mit einem anderen Log-Level zu protokollieren, indem man das Schlüsselwort-Argument exc_info=True
etwa so:
logging.debug("An exception was thrown!", exc_info=True)
logging.info("An exception was thrown!", exc_info=True)
logging.warning("An exception was thrown!", exc_info=True)
(Ich wollte dies eigentlich als Kommentar zu @jlduponts Antwort hinterlassen, aber ich habe nicht genug Ansehen).
Ich habe Antworten wie die von @jldupont auch an anderen Stellen gesehen. FWIW, Ich denke, es ist wichtig zu beachten, dass dies:
except Exception as e:
print(e)
gibt die Fehlerausgabe an sys.stdout
standardmäßig. Ein besserer Ansatz für die Fehlerbehandlung im Allgemeinen wäre:
except Exception as e:
print(e, file=sys.stderr)
(Beachten Sie, dass Sie import sys
damit dies funktioniert.) Auf diese Weise wird der Fehler gedruckt in STDERR
anstelle von STDOUT
, die eine ordnungsgemäße Analyse/Umleitung der Ausgabe usw. ermöglicht. Ich verstehe, dass sich die Frage ausschließlich auf das "Drucken eines Fehlers" bezog, aber es scheint wichtig zu sein, hier auf die beste Praxis hinzuweisen, anstatt dieses Detail wegzulassen, das zu nicht standardmäßigem Code für jeden führen könnte, der es nicht irgendwann besser lernt.
Ich habe nicht die traceback
Modul wie in der Antwort von Cat Plus Plus, und vielleicht ist das auch der beste Weg, aber ich dachte, ich werfe das hier mal raus.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.