手动创建Python追踪信息
在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
实例的属性是只读的,也就是说你不能直接修改它们。
1 个回答
0
与其直接修改异常的原始对象实例,不如使用格式化函数将追踪对象转换成更简单的格式,比如列表。然后在自定义这个追踪列表后,再把它转换回像原来那样可以打印的字符串。
所以,你只需要把自定义的追踪信息打印到你想要的文件里(包括标准输出等)。
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对象。