Python的warnings.simplefilter()是否检查消息?

时间:2019-11-27 02:59:09

标签: python warnings

如何在第一次在某个位置发出而不是再次显示的Python警告?

default action应该只在模块中的特定行显示第一个警告,而warnings.simplefilter()应该不管警告消息如何都起作用,但是它似乎仅适用于带有以下内容的警告相同的消息字符串。这是使用Python 3.7的MWE:

>>> import warnings
>>> class MyWarning(Warning): pass
... 
>>> warnings.simplefilter('default', MyWarning)
>>> for i in range(3):
...     warnings.warn(str(i), MyWarning)  # unique message each time
...     warnings.warn('foo', MyWarning)   # same message each time
... 
__main__:2: MyWarning: 0
__main__:3: MyWarning: foo
__main__:2: MyWarning: 1
__main__:2: MyWarning: 2

即使我使用了moduleonce动作(无论如何我都不想要),它仍然每次都显示带有唯一消息的动作。此外,即使我将更明确的warnings.filterwarnings()与应该匹配任何内容的消息一起使用,它仍会每次都显示它们:

warnings.filterwarnings('default', r'.*', MyWarning)

我想念什么吗?还是文档不正确again

0 个答案:

没有答案