Maison > Article > développement back-end > En Python, comment puis-je vérifier puis relancer une exception tout en conservant la pile d'appels d'origine ?
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
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.
Faites simplement ceci :
raise
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!