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 ?

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

WBOY
WBOYavant
2024-02-08 21:42:14490parcourir

在 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

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer