"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter la gestion des exceptions personnalisées avec le module de journalisation de Python \ s?

Comment implémenter la gestion des exceptions personnalisées avec le module de journalisation de Python \ s?

Publié le 2025-02-19
Parcourir:988

How to Implement Custom Exception Handling with Python\'s Logging Module?

Gestion des erreurs personnalisées avec le module de journalisation de Python

Assurer que les exceptions non apprises sont correctement gérées et enregistrées une application Python. Bien que la capture et les exceptions manuelles de journalisation soient une approche viable, il peut être fastidieux et sujet 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 apprises vers le module de journalisation. Cela fournit un moyen pratique et systématique de capturer et de journaliser les informations d'exception détaillées.

Solution

Le problème présenté peut être résolu en modifiant la fonction globale de SyscepThook. En définissant un gestionnaire d'exceptions personnalisés, vous pouvez intercepter toutes les exceptions non apprises et les gérer comme vous le souhaitez. Voici un exemple complet et robuste:

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

explication

Ce code:

  • définit un gestionnaire d'exception personnalisé, manche_exception, qui est invoqué Lorsqu'une exception non revêtue se produit. exit gracly.
  • enregistre l'exception non approuvée à l'aide de la méthode Error () du module de journalisation. Pour démontrer la gestion des erreurs personnalisées. Intervient et enregistre les détails de l'exception au gestionnaire configuré. Dans ce cas, le gestionnaire de flux par défaut est utilisé pour publier les informations d'exception à stdout.
  • Fonctionnalités supplémentaires
  • L'exemple inclut également quelques fonctionnalités facultatives:

filtrage:

ignorer certains types d'exceptions (par exemple, clavierInterrup) en utilisant la sous-classe Vérification.

Personnalisation:

Modifiez le gestionnaire de journalisation ou utilisez plusieurs gestionnaires pour contrôler le format de sortie et la destination des journaux d'exception.

    Déclaration de sortie Cet article est reproduit dans: 1729608201 S'il y a des violations, veuillez contacter [email protected] pour supprimer
    Dernier tutoriel Plus>

    Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

    Copyright© 2022 湘ICP备2022001581号-3