Mon expérience est en C # et je viens de commencer à programmer en Python. Lorsqu'une exception est levée, je souhaite généralement l'envelopper dans une autre exception qui ajoute plus d'informations, tout en affichant la trace complète de la pile. C'est assez simple en C #, mais comment faire en Python?
Par exemple. en C # je ferais quelque chose comme ceci:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
En Python, je peux faire quelque chose de similaire:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... mais cela perd le traçage de l'exception interne!
Edit: Je voudrais voir les deux messages d'exception et les deux traces de pile et corréler les deux. Autrement dit, je veux voir dans la sortie que l'exception X s'est produite ici, puis l'exception Y là - comme je le ferais en C #. Est-ce possible dans Python 2.6? Il semble que le mieux que je puisse faire jusqu'à présent (d'après la réponse de Glenn Maynard) est:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Cela inclut à la fois les messages et les deux retraits, mais cela ne montre pas quelle exception s'est produite où dans le retraçage.