Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich nicht abgefangene Ausnahmen in Python automatisch protokollieren?

Wie kann ich nicht abgefangene Ausnahmen in Python automatisch protokollieren?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-22 23:00:29305Durchsuche

How Can I Automatically Log Uncaught Exceptions in Python?

Protokollierung nicht abgefangener Ausnahmen in Python

Das Abfangen und Behandeln von Ausnahmen ist für die Fehlerbehandlung in Python von entscheidender Bedeutung. Was ist jedoch mit nicht abgefangenen Ausnahmen, die andernfalls in der Standardfehlerausgabe (stderr) ausgegeben würden?

Benutzerdefinierte Ausnahmebehandlung

Während es immer ratsam ist, Ausnahmen explizit abzufangen und zu behandeln, kann dies manchmal der Fall sein Praktisch, um die Protokollierung nicht erfasster Ausnahmen zu automatisieren. Anstatt sich auf einen Try/Except-Block zu verlassen, ermöglicht die folgende Lösung eine automatische Protokollierung:

<code class="python">import sys
import logging

# Create a custom exception handler
def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    # Use the logging module to handle the uncaught exception
    logger = logging.getLogger(__name__)
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Replace the default exception handler with our custom one
sys.excepthook = handle_exception

# Set up a logger and handler
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Raise an exception to test the custom exception handling
if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

Erklärung

Dieser Code führt mehrere Aufgaben aus:

  • Erstellt eine benutzerdefinierte Ausnahmehandlerfunktion (handle_Exception), die Standardausnahmeparameter (exc_type, exc_value und exc_traceback) verwendet.
  • Innerhalb von handle_Exception ignoriert der Code KeyboardInterrupt-Ausnahmen (Sie können also Strg C verwenden, um das Programm normal zu beenden ).
  • Nicht erfasste Ausnahmen werden mithilfe des Protokollierungsmoduls protokolliert, mit einer benutzerdefinierten Meldung „Nicht erfasste Ausnahme“ und den Ausnahmedetails.
  • Der benutzerdefinierte Ausnahmehandler wird als Standard-Ausnahmehandler registriert und ersetzt den von Python Standardverhalten beim Drucken auf stderr.

Durch die Automatisierung der Protokollierung nicht abgefangener Ausnahmen vereinfacht dieser Ansatz die Fehlerbehandlung und bietet einen zentralen Ort zur Überprüfung aller Ausnahmen, die während der Programmausführung auftreten, unabhängig davon, ob sie abgefangen werden oder nicht .

Das obige ist der detaillierte Inhalt vonWie kann ich nicht abgefangene Ausnahmen in Python automatisch protokollieren?. 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