我的背景是 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中可行吗?看起来我目前能做的最好的(基于 Glenn Maynard 的回答)是:
try:
ProcessFile(filePath)
except Exception as e:
raise Exception('Failed to process file' + filePath, e), None, sys.exc_info()[2]
这既包括消息,也包括回溯,但是它没有显示回溯中哪个异常发生在哪里。