gpt4 book ai didi

python - 如果我不知道错误在哪里,如何将 Python 错误打印到 txt 文件

转载 作者:行者123 更新时间:2023-12-05 09:11:30 24 4
gpt4 key购买 nike

我有一个非常大的 Python 3.x 程序在 Windows 中运行。它在 99.9% 的时间里运行良好,但偶尔会崩溃。我不确定是什么导致了崩溃,可能有很多原因。由于出于安全原因(不要问)我必须使用不可见的控制台运行程序“已编译”.exe,因此当它死掉时我看不到任何形式的控制台读数。所以很明显,如果我可以将崩溃回溯输出为文本文件,那就太好了。

我熟悉 Python 中的 try/except,但导致问题的代码片段可能在任何地方,我不想在数千行中的每一行周围编写单独的 try/except的代码。有没有一种方法可以让程序始终将任何程序停止错误输出为文本文件,无论是哪一行代码导致了问题,或者可能是什么错误?

最佳答案

在您的代码中的某处,您必须有一个进入可能崩溃的代码的入口点(至少在主脚本中)。您可以将其包装在 try/except 对中,然后使用 traceback 模块中的函数在异常发生时将其打印到文件中:

改变:

if __name__ == "__main__":
do_stuff()

收件人:

import traceback

if __name__ == "__main__":
try:
do_stuff()
except:
with open("exceptions.log", "a") as logfile:
traceback.print_exc(file=logfile)
raise

如果您愿意,您可以添加一些额外的代码来将额外的输出写入文件,包括时间/日期戳或您认为可能有用的任何其他信息。如果您想对代码的某些部分进行特殊审查,您可能需要添加额外的 try/except block ,或多或少类似于上面的 block 。例如,您可以将一个 block 放在一个循环中,如果发生异常,您可以在其中打印出循环值:

for x in some_iterable:
try:
do_something_with(x)
except:
with open("exceptions.log", "a") as logfile:
print("Got an exception while handling {!r} in the loop:".format(x)
traceback.print_exc(file=logfile)
raise # you could omit this line to suppress the exception and keep going in the loop

如果您想要一个更可配置的系统来解决问题的文件写入问题,您也可以使用logging 模块。 logging.debuglogging.exception 函数都读取 traceback 模块使用的相同异常信息,但有更多的格式化选项你自己(如果你想要的话)。请注意,设置日志记录比手动打开文件要复杂一些。

关于python - 如果我不知道错误在哪里,如何将 Python 错误打印到 txt 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com