Moje doświadczenie jest w C # i niedawno zacząłem programować w Pythonie. Gdy wyjątek jest zgłaszany, zwykle chcę zawinąć go w inny wyjątek, który dodaje więcej informacji, jednocześnie pokazując pełny ślad stosu. W C # jest to dość łatwe, ale jak to zrobić w Pythonie?
Na przykład. w C # zrobiłbym coś takiego:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
W Pythonie mogę zrobić coś podobnego:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... ale to powoduje utratę śledzenia wewnętrznego wyjątku!
Edycja: chciałbym zobaczyć zarówno komunikaty o wyjątkach, jak i oba ślady stosu i skorelować je. Oznacza to, że chcę zobaczyć w danych wyjściowych, że wyjątek X wystąpił tutaj, a następnie wyjątek Y tam - tak samo, jak w C #. Czy jest to możliwe w Pythonie 2.6? Wygląda na to, że najlepsze, co do tej pory mogę zrobić (na podstawie odpowiedzi Glenna Maynarda), to:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Obejmuje to zarówno komunikaty, jak i oba elementy śledzenia, ale nie pokazuje, który wyjątek wystąpił w miejscu śledzenia.