在覆盖sys.excepthook时获得格式化的回溯



我正在重新表述这个问题,因为似乎我在最初的问题中遇到了一些问题,而且它太模糊了。

我正在努力为sys建立一个替代函数。运行批处理作业时,请注意将错误保存到文件中。我参考了几个来源,并且我特别有麻烦得到追溯打印到文件。下面是一些对我有用的东西。

import sys
import traceback
def saveError(exctype, value, tb):
filename = tb.tb_frame.f_code.co_filename
name = tb.tb_frame.f_code.co_name
line_no = tb.tb_linno
with open('filepath.txt','w', newline = '') as f:
f.write(f"{filename}")
f.write(f"{name}")
f.write(f"{line_no}")
f.write(f"{exctype.__name__}")
f.write(f"{value}")
f.close()
sys.excepthook = saveError
print(1/0)

我遇到的问题是试图打印完整的追溯,你可以看到上面我已经拿出了它的各个部分,但还没有能够得到整个东西。下面是我尝试过的一些例子。

import traceback
trace = f"{traceback.format_exc()}"

返回NoneType: None

f.write(f"{tb}")

返回<回溯对象在0x7....>

trace2 = traceback.format_tb(tb)

这似乎没有返回任何

是否有一种方法可以将追溯信息转换为字符串格式并保存到文件中?

回溯对象没有这些方法。你需要import traceback然后traceback.print_exc(...)等等

最新更新