通过在处理异常时调用sys.exc_info()
,返回包含异常类、异常对象和跟踪的三元组。
这一点在sys.exc_info
的文档中也很明显。
此函数返回由三个值组成的元组,这些值提供有关当前正在处理的异常的信息。..。返回的值是
(type, value, traceback)
。..。traceback获取一个traceback对象(请参阅参考手册),该对象在异常最初发生的地方封装调用堆栈。
我想使用traceback类型,它用于在前面提到的exc_info
返回值中创建第三个变量,但是找不到定义它的位置。
因此,我的问题是,在哪里可以使用python脚本的traceback
类型?
编辑:
我想使用traceback
类型来定义一个PyQt信号。PyQt信号是通过指定信号名称和传递的参数类型来定义的。我做了,而不是需要创建那个类型的对象,只以类似于isinstance
调用的方式使用它。
发布于 2017-12-30 08:17:36
坏消息,即使您可以得到这样的回溯对象的类:
import sys
try:
raise Exception
except:
tb = sys.exc_info()[2]
print(tb.__class__)
结果:
<class 'traceback'>
当你尝试:
tb.__class__()
你得到:
TypeError: cannot create 'traceback' instances
因此,无法在外部实例化跟踪类型,可能是因为您需要访问python内部(而且属性是只读的,即使是tb_lineno
也不可能“重用”实例)。
发布于 2017-12-30 07:56:58
您可以使用traceback.format_exc()
或sys.exc_info()
,例如:
try:
raise TypeError("Error !?!")
except Exception:
print(traceback.format_exc())
# or
print(sys.exc_info()[2])
发布于 2021-02-09 06:01:41
我看到标签中包含了python2.7
,这个问题很古老,所以很抱歉再次提到这个问题,但我只想说,在现代Python中,TracebackType现在已经在types
模块中了:
>>> isinstance(sys.exc_info()[2], types.TracebackType))
True
尽管这个类本身似乎认为它有一个不同的名称:
>>> repr(sys.exc_info()[2].__class__)
<class 'traceback'>
真正有趣的是,虽然不是问题的主题,但对其中一个答案的解释是,现在可以手动构造一个追溯(自Python3.7以来)。这对于在异常中准确地反映报告的跟踪有着有趣的含义,并且与延迟/延迟/异步异常特别相关。这种改变本身就出现在https://github.com/python/cpython/pull/4793中--不过,我还没有看到在野外进行这种修改的任何好的文档/例子。请随意留下评论与这样的文章(或其他StackOverflow问题,实际上关心这一点)。
https://stackoverflow.com/questions/48035389
复制