Mein Hintergrund ist C # und ich habe erst kürzlich angefangen, in Python zu programmieren. Wenn eine Ausnahme ausgelöst wird, möchte ich sie normalerweise in eine andere Ausnahme einschließen, die weitere Informationen hinzufügt und gleichzeitig die vollständige Stapelverfolgung anzeigt. In C # ist das ganz einfach, aber wie mache ich das in Python?
Z.B. in C # würde ich so etwas machen:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
In Python kann ich etwas Ähnliches tun:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... aber das verliert den Traceback der inneren Ausnahme!
Bearbeiten: Ich möchte beide Ausnahmemeldungen und beide Stapelspuren sehen und die beiden korrelieren. Das heißt, ich möchte in der Ausgabe sehen, dass hier die Ausnahme X und dort die Ausnahme Y aufgetreten ist - genau wie in C #. Ist das in Python 2.6 möglich? Das Beste, was ich bisher tun kann (basierend auf Glenn Maynards Antwort), ist:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Dies umfasst sowohl die Nachrichten als auch die Tracebacks, zeigt jedoch nicht an, welche Ausnahme wo im Traceback aufgetreten ist.