如何将 Traceback 错误信息保存到文件中

Hed*_*edy 1 python error-handling file traceback python-3.x

假设我有一个非常简单的代码,但会引发错误:

print(1/0)
Run Code Online (Sandbox Code Playgroud)

如何将完整的回溯错误保存到文件中,以便该文件包含:

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    print(1/0)
ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)

Hed*_*edy 5

回溯标准库模块对于在 python 中处理回溯错误非常有用,只需获取一个文件对象,然后使用它将回溯写入文件:

\n
import traceback\n\nwith open(\'tb.txt\', \'w+\') as f:\n    try:\n        print(1/0)\n    except:\n        traceback.print_exc(file=f)\n
Run Code Online (Sandbox Code Playgroud)\n

我以写入模式打开一个文件(如果文件不存在\xe2\x80\x99t 则创建它),将对象另存为f,然后将引发错误的部分包装在try-except块中。这是必需的,因为错误发生时程序会终止并打印错误,因此我们\xe2\x80\x99没有时间保存跟踪。

\n

之后,在该except部分中,我们使用 将print_exc()回溯保存到文件中。

\n
\n

traceback.print_exc(limit=None, file=None, chain=True)

\n

这是 的简写print_exception(*sys.exc_info(), limit, file, chain)

\n
\n

请记住,don\xe2\x80\x99t 只是将文件名作为字符串传递,file参数需要有一个write()写入文件的方法。放置文件的打开/关闭可确保文件在使用后关闭。

\n

tb.txt的结果

\n
Traceback (most recent call last):\n  File "main.py", line 5, in <module>\n    print(1/0)\nZeroDivisionError: division by zero\n\n
Run Code Online (Sandbox Code Playgroud)\n

  • 我的错误是将文件参数指向文件名而不是其相应的文件句柄 - 谢谢。 (2认同)