有什么方法可以将每个警告都写在 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
模块通常输出的格式相同。
我希望我的程序将每个警告都写入 .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
模块通常输出的格式相同。