Il mio background è in C # e di recente ho iniziato a programmare in Python. Quando viene generata un'eccezione, in genere desidero racchiuderla in un'altra eccezione che aggiunge ulteriori informazioni, pur continuando a mostrare la traccia dello stack completo. È abbastanza facile in C #, ma come posso farlo in Python?
Per esempio. in C # farei una cosa del genere:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
In Python posso fare qualcosa di simile:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... ma questo perde il ritorno dell'eccezione interiore!
Modifica: mi piacerebbe vedere sia i messaggi di eccezione sia le tracce dello stack e correlare i due. Cioè, voglio vedere nell'output che l'eccezione X si è verificata qui e quindi l'eccezione Y lì - lo stesso che farei in C #. È possibile in Python 2.6? Sembra che il meglio che posso fare finora (basato sulla risposta di Glenn Maynard) è:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Ciò include sia i messaggi sia i traceback, ma non mostra quale eccezione si è verificata in cui nel traceback.