Heim >Backend-Entwicklung >Python-Tutorial >Wie protokolliere ich nicht abgefangene Ausnahmen in Python?

Wie protokolliere ich nicht abgefangene Ausnahmen in Python?

DDD
DDDOriginal
2024-10-22 23:54:29931Durchsuche

How to Log Uncaught Exceptions in Python?

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:

  • Tastaturunterbrechungsereignisse (Strg C) werden ignoriert, um ein ordnungsgemäßes Beenden des Programms zu ermöglichen
  • Nutzung der Formatierungsfunktionen des Protokollierungsmoduls für die Ausnahmeberichterstattung
  • Ausgabe nicht behandelter Ausnahmen an stdout statt an stderr
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn