Consignation des exceptions non interceptées en Python
Lorsqu'une exception se produit dans un programme Python et n'est pas gérée dans le bloc d'exécution actuel, elle est automatiquement imprimé avec l'erreur standard (stderr). Ce comportement peut être gênant, en particulier lorsque vous souhaitez capturer toutes les exceptions à des fins de journalisation ou de débogage.
Pour résoudre ce problème, vous pouvez configurer le module de journalisation pour qu'il génère automatiquement les exceptions non interceptées. Voici une solution qui exploite la fonction logging.exception() :
<code class="python">try: raise Exception('Throwing a boring exception') except Exception as e: logging.exception(e)</code>
Cette approche est efficace, mais nécessite de gérer et de consigner explicitement chaque exception. Pour une solution plus automatisée, vous pouvez remplacer la fonction sys.saufhook de Python, qui est responsable de la gestion des exceptions non interceptées.
Vous trouverez ci-dessous un exemple de configuration de journalisation complète qui inclut des fonctionnalités supplémentaires telles que :
<code class="python">import sys import logging logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) def handle_exception(exc_type, exc_value, exc_traceback): 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)) sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
Avec cette configuration en place, toutes les exceptions non interceptées seront automatiquement enregistrées par le module de journalisation.
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!