Nicht abgefangene Ausnahmen in Python protokollieren
Wenn eine Ausnahme in einem Python-Programm auftritt und nicht im aktuellen Ausführungsblock behandelt wird, erfolgt dies automatisch wird im Standardfehler (stderr) gedruckt. Dieses Verhalten kann unpraktisch sein, insbesondere wenn Sie alle Ausnahmen zu Protokollierungs- oder Debugzwecken erfassen möchten.
Um dieses Problem zu lösen, können Sie das Protokollierungsmodul so konfigurieren, dass nicht erfasste Ausnahmen automatisch ausgegeben werden. Hier ist eine Lösung, die die Funktion logging.Exception() nutzt:
<code class="python">try: raise Exception('Throwing a boring exception') except Exception as e: logging.exception(e)</code>
Dieser Ansatz ist effektiv, erfordert jedoch die explizite Behandlung und Protokollierung jeder Ausnahme. Für eine automatisiertere Lösung können Sie die Funktion sys.exclushook von Python überschreiben, die für die Behandlung nicht abgefangener Ausnahmen verantwortlich ist.
Unten finden Sie ein Beispiel einer vollständigen Protokollierungskonfiguration, die zusätzliche Funktionen enthält, wie zum Beispiel:
<code class="python">import sys import logging logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) def handle_exception(exc_type, exc_value, exc_traceback): if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
Mit dieser Konfiguration werden alle nicht erfassten Ausnahmen automatisch vom Protokollierungsmodul protokolliert.
Das obige ist der detaillierte Inhalt vonWie protokolliere ich nicht abgefangene Ausnahmen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!