À moins qu'elles ne soient explicitement gérées, les exceptions Python sont générées par défaut dans le flux d'erreurs standard du programme (stderr). Cependant, il peut y avoir des cas où il est préférable que les exceptions non interceptées soient enregistrées à l'aide du module de journalisation.
L'approche traditionnelle de la journalisation des exceptions non interceptées consiste à utiliser manuellement la méthode logging.exception(e) dans un bloc except. , comme démontré ci-dessous :
<code class="python">try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e)</code>
Cependant, l'appel automatique de logging.exception(...) pour chaque exception non interceptée élimine l'étape manuelle.
Considérez les extrait de code suivant :
<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>
Ce script modifié accomplit plusieurs tâches clés :
En remplaçant le gestionnaire d'exceptions par défaut par handle_exception, les exceptions non interceptées sont automatiquement enregistrées à l'aide de l'enregistreur configuré, améliorant ainsi la visibilité et facilitant le débogage.
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!