Мой фон находится на С#, и я только недавно начал программирование на Python. Когда возникает исключение, я обычно хочу обернуть его в другое исключение, которое добавляет дополнительную информацию, сохраняя при этом полную трассировку стека. Это довольно легко в С#, но как это сделать в Python?
Eg. в С# я бы сделал что-то вроде этого:
try
{
ProcessFile(filePath);
}
catch (Exception ex)
{
throw new ApplicationException("Failed to process file " + filePath, ex);
}
В Python я могу сделать что-то подобное:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file ' + filePath, e)
... но это теряет трассировку внутреннего исключения!
Изменить: Я бы хотел видеть как сообщения исключения, так и обе трассировки стека и сопоставить их. То есть, я хочу видеть на выходе, что исключение X произошло здесь, а затем исключение Y там - то же, что и в С#. Возможно ли это в Python 2.6? Похоже, лучшее, что я могу сделать до сих пор (на основе ответа Гленна Мейнарда):
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Это включает как сообщения, так и обе трассировки, но не показывает, какое исключение произошло в трассировке.