【问题标题】:Is there any way to write every warning in a .txt file in python?有没有办法在 python 的 .txt 文件中写入每个警告?
【发布时间】:2020-11-05 22:58:08
【问题描述】:

我希望我的程序将每个警告都写入 .txt 文件。有没有办法在不使用 catch_warnings 的情况下做到这一点?

【问题讨论】:

  • 是的,这是可能的。打开/创建一个文件,然后写入它。
  • @Terry 这似乎与 Python 警告无关。
  • 我添加了“编译器警告”标签。虽然 Python 显然没有编译器,但它的内置警告基本上与其他语言中的编译器警告类似,因此它似乎最合适。
  • @Tomerikoo 他们在谈论Python warnings,这与异常不同。
  • @ArthurTacca 哦,我明白了。这个问题不是很清楚(我不熟悉那个模块......)。谢谢。在这种情况下,您的答案似乎解决了这个问题

标签: python compiler-warnings


【解决方案1】:

一种选择是使用内置的 Python 日志记录。互联网上有很多关于如何使用 Python 日志记录系统的信息,尤其是在 Python 文档中(例如,参见 Logging HOWTO)。但是打开文件日志记录的最简单方法是使用basicConfig() 函数,如下所示:

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

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

logging.captureWarnings(True)

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

logging.info("My own message")

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

您可以通过分配给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 模块通常输出的格式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2019-02-11
    • 2011-07-28
    • 2010-09-16
    • 2020-05-21
    相关资源
    最近更新 更多