Maison > développement back-end > Tutoriel Python > En Python, comment puis-je vérifier puis relancer une exception tout en conservant la pile d'appels d'origine ?

En Python, comment puis-je vérifier puis relancer une exception tout en conservant la pile d'appels d'origine ?

WBOY
Libérer: 2024-02-08 21:42:14
avant
527 Les gens l'ont consulté

在 Python 中,如何在维护原始调用堆栈的同时检查然后重新引发异常?

Contenu de la question

Je me suis retrouvé dans une situation où j'attrapais un type d'exception spécifique, vérifiant le message de l'exception pour vérifier si c'était bien l'exception que je voulais attraper, et sinon, je relance l'exception :

try:
    # do something exception-prone
except FooException as e:
    if e.message == 'Something I want to handle':
        # handle the exception
    else:
        raise e
Copier après la connexion

Cela fonctionne bien, mais il y a un problème. Dans le cas où je relance l'exception, l'exception se produit désormais à la ligne où je l'ai re-relancée (c'est-à-dire à raise e ), plutôt qu'à l'endroit où l'exception s'est produite à l'origine. Ce n'est pas idéal pour le débogage, puisque vous souhaitez savoir où l'exception d'origine s'est produite.

Ma question est donc la suivante : existe-t-il un moyen de relancer ou de "passer" une exception après l'avoir interceptée, tout en conservant l'emplacement d'origine de l'exception ?

REMARQUE : Si vous vous demandez ce qui se passe réellement : j'utilise les instructions d'importation de __import__ 动态导入一些模块。我正在捕获 importerror 来优雅地处理任何这些模块不存在的情况。但是,如果这些模块本身包含引发 importerror là où je veux que ces exceptions "réelles" (du point de vue de mon application) soient déclenchées - et à l'endroit d'origine du débogage où les outils sont impliqués.


Bonne réponse


Faites simplement ceci :

raise
Copier après la connexion

au lieu de raise e。请参阅关于引发异常的教程部分,以及raise. Voir la section tutoriel sur Lancement d'une exception , et raise

 : 🎜

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal