在没有sys.exc_info的情况下从异常中获取信息

时间:2016-05-25 13:28:54

标签: python exception

我试图从异常对象err中获取更多信息,超出其错误消息。在我的代码中,我有时会捕获某些子函数中的异常。回到顶层,我想打印关于异常发生位置的信息等。

我见过类似的问题,答案涉及使用sys.exc_info,但根据文档,这太有限了:

  

返回有关由except捕获的最新异常的信息   当前堆栈帧或旧堆栈帧中的子句。

虽然我希望从程序执行中某个不可知的点捕获并存储的任意异常对象中获取此信息,但可能会在以后的某些点引发多个异常。

信息似乎在那里;如果我发出raise err,那一切都会出来。但我无法弄清楚如何在没有rais的情况下将其从异常对象中删除。我可以以某种方式从字符串中捕获raise的输出并打印出来吗?

2 个答案:

答案 0 :(得分:1)

使用traceback模块:

>>> import traceback
>>> try:
...  raise Exception()
... except Exception as e:
...  print(traceback.extract_tb(e.__traceback__))
... 
[('<stdin>', 2, '<module>', None)]

(2是行号)

答案 1 :(得分:0)

这会提供与sys.exc_info相同的输出,但会出现任意异常:

def exc_info(exc):
    return type(exc), exc, exc.__traceback__