首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用python跟踪类型

使用python跟踪类型
EN

Stack Overflow用户
提问于 2017-12-30 15:45:36
回答 4查看 725关注 0票数 3

通过在处理异常时调用sys.exc_info(),返回包含异常类、异常对象和跟踪的三元组。

这一点在sys.exc_info的文档中也很明显。

此函数返回由三个值组成的元组,这些值提供有关当前正在处理的异常的信息。..。返回的值是(type, value, traceback)。..。traceback获取一个traceback对象(请参阅参考手册),该对象在异常最初发生的地方封装调用堆栈。

我想使用traceback类型,它用于在前面提到的exc_info返回值中创建第三个变量,但是找不到定义它的位置。

因此,我的问题是,在哪里可以使用python脚本的traceback类型?

编辑:

我想使用traceback类型来定义一个PyQt信号。PyQt信号是通过指定信号名称和传递的参数类型来定义的。我做了,而不是需要创建那个类型的对象,只以类似于isinstance调用的方式使用它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-30 16:17:36

坏消息,即使您可以得到这样的回溯对象的类:

代码语言:javascript
运行
复制
import sys

try:
    raise Exception
except:
    tb = sys.exc_info()[2]

print(tb.__class__)

结果:

代码语言:javascript
运行
复制
<class 'traceback'>

当你尝试:

代码语言:javascript
运行
复制
tb.__class__()

你得到:

代码语言:javascript
运行
复制
TypeError: cannot create 'traceback' instances

因此,无法在外部实例化跟踪类型,可能是因为您需要访问python内部(而且属性是只读的,即使是tb_lineno也不可能“重用”实例)。

票数 4
EN

Stack Overflow用户

发布于 2017-12-30 15:56:58

您可以使用traceback.format_exc()sys.exc_info(),例如:

代码语言:javascript
运行
复制
try:
    raise TypeError("Error !?!")
except Exception:
    print(traceback.format_exc())
    # or
    print(sys.exc_info()[2])
票数 1
EN

Stack Overflow用户

发布于 2021-02-09 14:01:41

我看到标签中包含了python2.7,这个问题很古老,所以很抱歉再次提到这个问题,但我只想说,在现代Python中,TracebackType现在已经在types模块中了:

代码语言:javascript
运行
复制
>>> isinstance(sys.exc_info()[2], types.TracebackType))
True

尽管这个类本身似乎认为它有一个不同的名称:

代码语言:javascript
运行
复制
>>> repr(sys.exc_info()[2].__class__)
<class 'traceback'>

真正有趣的是,虽然不是问题的主题,但对其中一个答案的解释是,现在可以手动构造一个追溯(自Python3.7以来)。这对于在异常中准确地反映报告的跟踪有着有趣的含义,并且与延迟/延迟/异步异常特别相关。这种改变本身就出现在https://github.com/python/cpython/pull/4793中--不过,我还没有看到在野外进行这种修改的任何好的文档/例子。请随意留下评论与这样的文章(或其他StackOverflow问题,实际上关心这一点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48035389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档