Мой опыт работы в C #, и я только недавно начал программировать на Python. Когда выдается исключение, я обычно хочу обернуть его в другое исключение, которое добавляет больше информации, в то же время показывая полную трассировку стека. Это довольно легко в C #, но как мне это сделать в Python?
Например. в C # я бы сделал что-то вроде этого:
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 там - так же, как и в C #. Возможно ли это в Python 2.6? Похоже, лучшее, что я могу сделать до сих пор (основываясь на ответе Гленна Мейнарда), это:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
Это относится как к сообщениям, так и к обоим трассировкам, но не показывает, какое исключение произошло в трассировке.