我希望一个循环中检测到的每个问题都会引发一个警告,但是这个警告只引发一次,这是第一次。例如:
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为什么我只有一个警告?如何获得每次迭代的警告?
发布于 2014-03-26 13:00:37
这是故意的。见http://docs.python.org/2/library/warnings.html的文档
对于同一源位置的特定警告的重复通常被抑制。
可以通过添加带有关键字always的筛选器来覆盖此行为,如下所示:
import warnings
warnings.simplefilter('always', UserWarning)
for i in range(10):
print i
warnings.warn('this is a warning message')发布于 2014-03-26 13:01:44
来自 module documentation
对于同一源位置的特定警告的重复通常被抑制。
这是故意的。
如果您希望始终打印消息,我不会使用warnings模块;您可以重置筛选器(使用warnings.resetwarnings(),但这在很大程度上是而不是推荐的,因为您也抛弃了任何用户配置的过滤器。您可以添加一个显式筛选器,它总是允许使用 function的消息。
warnings.simplefilter('always', UserWarning)但我会直接写信给sys.stderr。
发布于 2014-03-26 13:07:43
在其他答案中已经提到,默认情况下,每个警告都会针对发生的每个源文件打印一次。但是,您可以很容易地从命令行更改这一点。通过说python -W all来调用解释器
$ python -W all
Python 2.7.6 (default, Mar 16 2014, 23:42:21)
[GCC 4.5.3] on netbsd6
Type "help", "copyright", "credits" or "license" for more information.
>>> import warnings
>>> for i in range(10):
print i
warnings.warn('this is a warning message')... ...
...
0
__main__:3: UserWarning: this is a warning message
1
__main__:3: UserWarning: this is a warning message
2
__main__:3: UserWarning: this is a warning message
3
__main__:3: UserWarning: this is a warning message
4
__main__:3: UserWarning: this is a warning message
5
__main__:3: UserWarning: this is a warning message
6
__main__:3: UserWarning: this is a warning message
7
__main__:3: UserWarning: this is a warning message
8
__main__:3: UserWarning: this is a warning message
9
__main__:3: UserWarning: this is a warning message
>>>https://stackoverflow.com/questions/22661745
复制相似问题