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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <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>
|
Nach dem Login kopieren
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!