首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动创建Python回溯

手动创建Python回溯
EN

Stack Overflow用户
提问于 2014-06-09 01:12:19
回答 1查看 605关注 0票数 6

可以在Python中创建自定义回溯吗?我正在尝试编写一个模仿Python3的raise ... from ...的函数raise_from()

代码语言:javascript
复制
def raise_from(exc, cause):
    """ Raises the Exception *exc* from the calling stack-frame,
    settings its ``__cause__`` to *cause*. """

    exc.__cause__ = cause

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

    # Remove the last traceback entry.
    prelast_tb = tb
    while prelast_tb.tb_next:
        prelast_tb = prelast_tb.tb_next
    prelast_tb.tb_next = None

    raise type(exc), exc, tb

不幸的是,traceback实例的属性是只读的。

EN

回答 1

Stack Overflow用户

发布于 2014-06-09 06:02:06

您可以简单地使用回溯对象的格式函数将其转换为更简单的格式,而不是修改exception的原始对象实例。在自定义回溯列表后,将其转换回可打印的字符串,如原来的字符串:

因此,您只需要将自定义版本的trace-back打印到所需的文件中(包括stdout等)。

代码语言:javascript
复制
tb_list = traceback.extract_tb(tb)
tb_list = tb_list[:-1] #omitting the last trace-back entry
tb_str = tb.format_list(tb_list)
# print whatever

但是如果你想覆盖回溯对象的原始属性,你应该通过定制插槽或者覆盖类的@property字段来覆盖traceback对象。

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

https://stackoverflow.com/questions/24108656

复制
相关文章

相似问题

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