Enchaînement des exceptions et relance
Glissez pour afficher le menu
Lors de la gestion des erreurs en Python, il peut arriver qu'intercepter une exception vous amène à en lever une autre différente. Dans ces situations, il est important de préserver le contexte de l'erreur d'origine. Le chaînage d'exceptions en Python permet cela grâce au mot-clé from. En chaînant explicitement les exceptions, vous fournissez des traces d'exécution plus détaillées, ce qui facilite la compréhension de la séquence d'erreurs ayant conduit à l'échec.
Supposons que vous écriviez une fonction qui traite des entrées provenant d'un fichier. Si une erreur survient lors de la lecture du fichier, vous pouvez vouloir lever une exception personnalisée mieux adaptée à la logique de votre application, tout en conservant les informations sur l'erreur d'origine. Utiliser raise NewException() from original_exception permet précisément cela.
La relance d'exceptions est une technique connexe. Parfois, après avoir intercepté une exception, il peut être utile d'effectuer un nettoyage ou une journalisation, puis de laisser l'exception se propager. Cela s'effectue simplement avec raise sans spécifier d'exception, ce qui relance la dernière exception interceptée. Le chaînage et la relance d'exceptions sont deux pratiques précieuses pour écrire du code robuste et facile à déboguer.
12345678910111213141516# Simple exception chaining and re-raising example def divide(a, b): try: return a / b except ZeroDivisionError as err: # Chain a new exception to the original raise ValueError("Cannot divide by zero") from err try: divide(5, 0) except ValueError as e: print("Caught ValueError:") import traceback traceback.print_exc() print("\nRe-raising the exception...\n") raise
Ce code illustre le chaînage simple d'exceptions et la relance en Python. La fonction divide tente de diviser deux nombres et intercepte un ZeroDivisionError, qu'elle chaîne à une nouvelle exception ValueError avec un message explicite. Le bloc try-except externe intercepte la ValueError, affiche la trace complète montrant les deux exceptions, puis relance l'exception pour la propager davantage.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion