Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich nicht behandelte Ausnahmen in Python mithilfe des Protokollierungsmoduls protokollieren?

Wie kann ich nicht behandelte Ausnahmen in Python mithilfe des Protokollierungsmoduls protokollieren?

Barbara Streisand
Barbara StreisandOriginal
2024-10-23 00:10:03753Durchsuche

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

Protokollierung nicht abgefangener Ausnahmen in Python

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.

Implementierung

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:

  • Benutzerdefinierte Protokollierung:Verwendung des Protokollierungsmoduls zum Formatieren und Aufzeichnen nicht erfasster Ausnahmen.
  • Standardausgabebehandlung: Die Ausnahmen mithilfe eines benutzerdefinierten Handlers an stdout weiterleiten und sicherstellen, dass sie im Konsolenfenster angezeigt werden.
  • Selektive Ausnahmebehandlung: Ignorieren von KeyboardInterrupt-Ausnahmen, um einen ordnungsgemäßen Konsolenausgang über Strg C aufrechtzuerhalten.

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!

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