如何在第一次在某个位置发出而不是再次显示的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
即使我使用了module
或once
动作(无论如何我都不想要),它仍然每次都显示带有唯一消息的动作。此外,即使我将更明确的warnings.filterwarnings()
与应该匹配任何内容的消息一起使用,它仍会每次都显示它们:
warnings.filterwarnings('default', r'.*', MyWarning)
我想念什么吗?还是文档不正确again?