Python中的“内部异常”(带回溯)?

问题:

我的背景是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]

这包括消息和回溯两者,但它不显示在回溯中的哪个异常。

回答:

这很简单;通过追溯作为提出的第三个参数。

import sys
class MyException(Exception): pass

try:
    raise TypeError("test")
except TypeError, e:
    raise MyException(), None, sys.exc_info()[2]

在捕获一个例外并重新提起另一个异常时,请务必执行此操作。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: “Inner exception” (with traceback) in Python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 7 = 1