提问人:user2355903 提问时间:3/31/2023 最后编辑:user2355903 更新时间:4/1/2023 访问量:95
覆盖 sys.excepthook 时获取格式化回溯
Getting formatted traceback when overwriting sys.excepthook
问:
我正在重新措辞这个问题,因为我在最初的问题中似乎有一些问题,而且太模糊了。
我正在努力尝试为 sys.excepthook 构建一个替换函数,以便在运行批处理作业时将错误保存到文件中。我已经引用了几个来源,并且特别难以将回溯打印到文件。以下是对我有用的东西。
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}")
这将返回 <traceback 对象 at 0x7...。
trace2 = traceback.format_tb(tb)
这似乎什么也没返回
有没有办法将回溯信息转换为字符串格式并将其保存到文件中?
答:
1赞
Vinay Sajip
3/31/2023
#1
回溯对象没有这些方法。你需要,然后等等。import traceback
traceback.print_exc(...)
评论
0赞
user2355903
3/31/2023
好吧,这绝对是我犯的一个明显错误,但除了print_exc说“无类型”之外,我似乎仍然无法获得任何信息。当我导入该包并将 tb 更改为 traceback 时。
评论