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

问题描述 投票:0回答:1

我正在改写这个问题,因为我最初的问题似乎有些问题,而且太模糊了。

我正在尝试为 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}")

返回

trace2 = traceback.format_tb(tb)

这似乎什么都没有返回

有没有办法将traceback信息转化为字符串格式保存到文件中?

python exception logging error-handling unhandled-exception
1个回答
1
投票

回溯对象没有这些方法。你需要

import traceback
然后
traceback.print_exc(...)

© www.soinside.com 2019 - 2024. All rights reserved.