有什么方法可以将每个警告都写在 python 的 .txt 文件中吗?

Is there any way to write every warning in a .txt file in python?

我希望我的程序将每个警告都写入 .txt 文件中。有什么办法可以不使用 catch_warnings?

一种选择是使用内置的 Python 日志记录。互联网上有很多关于如何使用 Python 日志系统的信息,尤其是在它的 Python 文档中(例如,参见 Logging HOWTO). But the simplest way to turn on logging to a file is with the basicConfig() 函数,如下所示:

import logging
logging.basicConfig(filename="myfile.txt",level=logging.DEBUG)

现在您可以使用 captureWarnings() 函数启用警告记录:

logging.captureWarnings(True)

作为奖励,您现在还可以记录自己的消息:

logging.info("My own message")

另一种方法是自己更换警告处理程序。这是稍微多一点的工作,但它更专注于警告。 showwarning()warning 模块文档说:

You may replace this function with any callable by assigning to warnings.showwarning.

因此您可以使用相同的参数列表定义您自己的函数,并将其分配给该变量:

warning_file = open("warnings.txt", "w")

def mywarning(message, category, filename, lineno, file=None, line=None):
    warning_file.write(warnings.formatwarning(message, category, filename, lineno, file, line))

warnings.showwarning = mywarning

请注意,我在函数外部打开了 warning_file,因此它会在您的 Python 脚本启动时打开一次。我还使用了 formatwarning() 函数,以便输出与 warnings 模块通常输出的格式相同。