2009-12-23 3 views
4

Si j'ai un scénario où une exception est levée, interceptée, puis relancée dans le bloc except :, est-il possible de capturer le cadre de pile initial à partir duquel elle a été levée?Récupération des exceptions doublement augmentées trace de pile originale en python

La trace de pile imprimée en tant que sortie Python décrit l'endroit où l'exception est déclenchée une seconde fois. Existe-t-il un moyen de déclencher l'exception de telle sorte que l'image de pile que l'exception a été lancée à l'origine s'affiche?

Répondre

11

Il est une erreur commune de re-soulever une exception en précisant à nouveau l'instance d'exception, comme ceci:

except Exception, ex: 
    # do something 
    raise ex 

Cette info BANDES Les retraçage d'origine et commence une nouvelle. Ce que vous devez faire est la place, sans préciser explicitement l'exception (à savoir utiliser un « nu » raise):

except Exception, ex: 
    # do something 
    raise 

Cela préserve toutes les informations d'origine dans la trace de la pile. Voir this section in the docs pour un arrière-plan un peu utile.

+0

C'est exactement ce que je veux! Merci! – user196835

Questions connexes