Gestion personnalisée des erreurs avec le module de journalisation de Python
S'assurer que les exceptions non interceptées sont correctement gérées et enregistrées peut être crucial pour le dépannage et le maintien de la stabilité de une application Python. Bien que la détection et la journalisation manuelles des exceptions soient une approche viable, elle peut être fastidieuse et sujette aux erreurs.
Pour résoudre ce problème, Python vous permet de remplacer le mécanisme de gestion des exceptions par défaut et de rediriger les exceptions non interceptées vers le module de journalisation. Cela fournit un moyen pratique et systématique de capturer et d'enregistrer des informations détaillées sur les exceptions.
Solution
Le problème présenté peut être résolu en modifiant la fonction globale sys.saufhook. En définissant un gestionnaire d'exceptions personnalisé, vous pouvez intercepter toutes les exceptions non interceptées et les gérer comme vous le souhaitez. Voici un exemple complet et robuste :
<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): # Ignore KeyboardInterrupt so the application can exit with Ctrl + C if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return # Log the uncaught exception logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception # Example code to test the custom exception handling if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
Explication
Ce code :
Lorsqu'une exception non interceptée est déclenchée, le gestionnaire d'exceptions personnalisé Le gestionnaire d'exceptions intervient et enregistre les détails de l'exception dans le gestionnaire configuré. Dans ce cas, le gestionnaire de flux par défaut est utilisé pour afficher les informations d'exception sur la sortie standard.
Fonctionnalités supplémentaires
L'exemple comprend également quelques fonctionnalités facultatives :
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!