我希望对循环中检测到的每个问题都发出警告,但警告只发出一次,即第一次。例如:
import warnings
for i in range(10):
print i
warnings.warn('this is a warning message')
我期望:
0
UserWarning: this is a warning message
1
UserWarning: this is a warning message
2
UserWarning: this is a warning message
3
UserWarning: this is a warning message
4
但结果是
0
__main__:4: UserWarning: this is a warning message
1
2
3
4
为什么我只有一个警告?我如何获得每次迭代的警告?
4条答案
按热度按时间pnwntuvh1#
这是设计好的请参阅http://docs.python.org/2/library/warnings.html上的文档:
您可以通过添加一个带有关键字
always
的过滤器来覆盖此行为,如下所示:von4xj4u2#
关于
warnings
module documentation:对于相同源位置的特定警告的重复通常被抑制。
这是设计好的。
如果你想让你的消息总是被打印出来,我不会使用
warnings
模块;你可以重置过滤器(使用warnings.resetwarnings()
,但这是非常不推荐的,因为你也会丢弃任何用户配置的过滤器。您可以添加一个显式过滤器,始终允许使用warnings.simplefilter()
函数的消息:但我会直接写
sys.stderr
jslywgbw3#
在其他答案中已经提到,默认情况下,每个警告会在每个源文件中打印一次。但是,您可以从命令行轻松更改。通过说
python -W all
调用解释器:yuvru6vn4#
默认过滤器可防止多次出现警告-您可以使用simplefilter覆盖过滤器。