我在验证器中发出了很多警告,我想抑制stdout中的所有内容,除了提供的消息warnings.warn().
即,现在我看到了这个:
./file.py:123: UserWarning: My looong warning message
some Python code
Run Code Online (Sandbox Code Playgroud)
我想看到这个:
My looong warning message
Run Code Online (Sandbox Code Playgroud)
编辑2:覆盖warnings.showwarning()结果工作:
def _warning(
message,
category = UserWarning,
filename = '',
lineno = -1):
print(message)
...
warnings.showwarning = _warning
warnings.warn('foo')
Run Code Online (Sandbox Code Playgroud)
Ott*_*ger 23
总是有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")
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 16
Monkeypatch warnings.showwarning()具有您自己的自定义功能.
下面是我在做什么,省略刚的源代码行.这一点基本上都是文档所建议的,但要弄清楚究竟要改变什么是有点困难的.(特别是,我尝试了各种方法来保持源代码行,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='')
Run Code Online (Sandbox Code Playgroud)
只是传递line=None会导致Python使用filename并自动计算lineno出一个值line,但是传递一个空字符串会修复它.
| 归档时间: |
|
| 查看次数: |
8247 次 |
| 最近记录: |