gpt4 book ai didi

python - 手动创建 Python Traceback

转载 作者:太空狗 更新时间:2023-10-30 00:17:24 29 4
gpt4 key购买 nike

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

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 实例的属性是只读的。

最佳答案

无需修改异常的原始对象实例,您可以简单地使用追溯对象的格式函数将其转换为更简单的格式,如列表。并在自定义回溯列表后,将其转换回与原始字符串一样的可打印字符串:
因此,您只想将自定义版本的回溯打印到所需的文件中(包括标准输出,...)

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

但是如果你想覆盖traceback对象的原始属性,你应该通过自定义槽或覆盖类的@property字段来覆盖TraceBack对象。

关于python - 手动创建 Python Traceback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108656/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com