Wie protokolliere ich nicht abgefangene Ausnahmen in Python?

DDD
Freigeben: 2024-10-22 23:54:29
Original
842 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!