Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich nicht behandelte Ausnahmen in Python mithilfe des Protokollierungsmoduls protokollieren?
Sofern sie nicht explizit behandelt werden, werden Python-Ausnahmen standardmäßig im Standardfehlerstrom des Programms (stderr) ausgegeben. Es kann jedoch Fälle geben, in denen es wünschenswert ist, nicht abgefangene Ausnahmen stattdessen mit dem Protokollierungsmodul zu protokollieren.
Der herkömmliche Ansatz zum Protokollieren nicht abgefangener Ausnahmen besteht darin, die Methode logging.Exception(e) innerhalb eines Ausnahmeblocks manuell zu verwenden , wie unten gezeigt:
<code class="python">try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e)</code>
Durch den automatischen Aufruf von logging.Exception(...) für jede nicht abgefangene Ausnahme entfällt jedoch der manuelle Schritt.
Bedenken Sie Folgendes Folgender Codeausschnitt:
<code class="python">import sys import logging # Custom logger with handler for stdout logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) # Custom exception handler to log uncaught exceptions def handle_exception(exc_type, exc_value, exc_traceback): # Ignore KeyboardInterrupt for Ctrl + C exit 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)) # Assign custom exception handler sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
Dieses modifizierte Skript führt mehrere wichtige Aufgaben aus:
Durch Überschreiben des Standard-Ausnahmehandlers mit handle_Exception werden nicht abgefangene Ausnahmen automatisch mit dem konfigurierten Logger protokolliert, was die Sichtbarkeit verbessert und das Debuggen erleichtert.
Das obige ist der detaillierte Inhalt vonWie kann ich nicht behandelte Ausnahmen in Python mithilfe des Protokollierungsmoduls protokollieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!