是否可以在Python中创建自定义回溯?我试图编写一个模仿Python 3 raise_from()
的函数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
实例的属性是只读的。
答案 0 :(得分:1)
您可以简单地使用跟踪对象的格式函数将其转换为更简单的格式(如list),而不是修改异常的原始对象实例。在自定义回溯列表后,将其转换回原始的可打印字符串:
所以,你只想将自定义版本的追溯打印到所需的文件中(包括stdout,......)
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对象。