我在验证器中发出了很多警告,除了提供给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')
答案 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使用filename
和lineno
自动计算line
的值,但传递空字符串会修复它。