Maison >développement back-end >Tutoriel Python >Comment puis-je enregistrer automatiquement les exceptions non interceptées en Python ?

Comment puis-je enregistrer automatiquement les exceptions non interceptées en Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-22 23:00:29387parcourir

How Can I Automatically Log Uncaught Exceptions in Python?

Consignation des exceptions non interceptées en Python

La capture et la gestion des exceptions sont cruciales pour la gestion des erreurs en Python. Cependant, qu'en est-il des exceptions non interceptées qui seraient autrement imprimées dans la sortie d'erreur standard (stderr) ?

Gestion personnalisée des exceptions

Bien qu'il soit toujours conseillé d'intercepter et de gérer les exceptions explicitement, cela peut parfois être pratique pour automatiser la journalisation des exceptions non interceptées. Au lieu de s'appuyer sur un bloc try/sauf, la solution suivante permet que la journalisation se fasse automatiquement :

<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>

Explication

Ce code accomplit plusieurs tâches :

  • Crée une fonction de gestionnaire d'exceptions personnalisée (handle_exception) qui prend les paramètres d'exception standard (exc_type, exc_value et exc_traceback).
  • Dans handle_exception, le code ignore les exceptions KeyboardInterrupt (vous pouvez donc utiliser Ctrl C pour quitter le programme normalement ).
  • Les exceptions non interceptées sont enregistrées à l'aide du module de journalisation, avec un message personnalisé "Exception non interceptée" et les détails de l'exception.
  • Le gestionnaire d'exceptions personnalisé est enregistré comme gestionnaire d'exceptions par défaut, remplaçant celui de Python. comportement par défaut de l'impression sur stderr.

En automatisant la journalisation des exceptions non interceptées, cette approche simplifie la gestion des erreurs et fournit un emplacement central pour examiner toutes les exceptions qui se produisent pendant l'exécution du programme, qu'elles soient interceptées ou non. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn