仅打印警告信息

56 投票
5 回答
18541 浏览
提问于 2025-04-15 18:48

我在一个验证器里发出了很多警告,我想要屏蔽掉标准输出中的所有内容,只保留通过 warnings.warn() 传递的消息。

也就是说,现在我看到的是:

./file.py:123: UserWarning: My looong warning message
some Python code

我想看到的是:

My looong warning message

编辑 2:重写 warnings.showwarning() 结果证明是有效的:

def _warning(
    message,
    category = UserWarning,
    filename = '',
    lineno = -1):
    print(message)
...
warnings.showwarning = _warning
warnings.warn('foo')

5 个回答

13

使用日志模块,不要用warnings

48

总是可以用猴子补丁来解决问题:

import warnings

def custom_formatwarning(msg, *args, **kwargs):
    # ignore everything except the message
    return str(msg) + '\n'

warnings.formatwarning = custom_formatwarning
warnings.warn("achtung")
21

用你自己的自定义函数来替换 warnings.showwarning() 这个函数。

撰写回答