覆盖 sys.excepthook 时获取格式化回溯

Getting formatted traceback when overwriting sys.excepthook

提问人:user2355903 提问时间:3/31/2023 最后编辑:user2355903 更新时间:4/1/2023 访问量:95

问:

我正在重新措辞这个问题,因为我在最初的问题中似乎有一些问题,而且太模糊了。

我正在努力尝试为 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)

这似乎什么也没返回

有没有办法将回溯信息转换为字符串格式并将其保存到文件中?

Python 日志记录 错误 未处理异常

评论

0赞 user2355903 3/31/2023
好吧,我在上面发布了一次尝试,但是是的,我想我也可以回去尝试获取我以前的版本。你想看看我为完成这项工作所做的所有尝试吗?
0赞 Scott Hunter 3/31/2023
您是否验证过可以将某些内容(不一定与异常相关)打印到此文件?你在哪里关闭这个文件?
0赞 user2355903 3/31/2023
是的,我添加了另一个版本,我验证我能够将一些文本写入文件。

答:

1赞 Vinay Sajip 3/31/2023 #1

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

评论

0赞 user2355903 3/31/2023
好吧,这绝对是我犯的一个明显错误,但除了print_exc说“无类型”之外,我似乎仍然无法获得任何信息。当我导入该包并将 tb 更改为 traceback 时。