仅打印警告消息

时间:2010-02-02 20:08:10

标签: python warnings

我在验证器中发出了很多警告,除了提供给warnings.warn()的消息之外,我想要禁止stdout中的所有内容。

即,现在我看到了这个:

./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')

4 个答案:

答案 0 :(得分:21)

总有monkeypatching:

import warnings

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

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

答案 1 :(得分:15)

Monkeypatch warnings.showwarning(),带有您自己的自定义功能。

答案 2 :(得分:10)

使用logging module代替warnings

答案 3 :(得分:9)

这就是我正在做的,省略只是源代码行。这一点基本上都是文档所建议的,但要弄清楚究竟要改变什么是有点困难的。 (特别是,我尝试了各种方法来保持源代码行不在showwarnings但是无法按照我想要的方式工作。)

# Force warnings.warn() to omit the source code line in the message
formatwarning_orig = warnings.formatwarning
warnings.formatwarning = lambda message, category, filename, lineno, line=None: \
    formatwarning_orig(message, category, filename, lineno, line='')

只是传递line=None会导致Python使用filenamelineno自动计算line的值,但传递空字符串会修复它。