【发布时间】:2013-01-08 02:04:52
【问题描述】:
考虑一下:
>>> import warnings
>>> warnings.filterwarnings("always", category=DeprecationWarning)
>>> warnings.warn("Hello", DeprecationWarning)
/usr/bin/bpython:2: DeprecationWarning: Hello
OK 那里收到警告。
>>> warnings.filterwarnings("ignore", category=DeprecationWarning)
>>> warnings.warn("Silence", DeprecationWarning)
这里没有警告。
>>> warnings.filterwarnings("always", category=DeprecationWarning)
>>> warnings.warn("Silence", DeprecationWarning) # why remain silent?
>>>
这里没有警告,但对于我所看到的一切,应该发出警告。如果您同时删除 python 2 和 3 上的“忽略”过滤器,也会发生同样的情况。
虽然原则上这不应该是一个问题(除非有其他原因),但我在不知不觉中在某处创建了此静音警告。这使得很难确定警告是否在给定的警告上下文中得到控制。
注意:在脚本中,此示例运行良好。但是我最初的问题可能只与这个例子相似,所以我怀疑它是否仅限于交互式提示。在最初的问题中,即使warnings.filters 中的第一个过滤器应该与“always”匹配(我检查过),我也没有看到任何警告。
【问题讨论】:
-
@mgilson,基本上是的,但它不起作用......基本上我想保存和恢复警告上下文,这使它无法像我预期的那样工作。
-
我无法重现您所说的内容。将其放入脚本时,我看到 2 个警告。
-
@mgilson,是的,你就在我得到相同的脚本中,所以这与交互式提示有关,但这并不能说服我......
-
您说的很对,与交互式提示相比,这在脚本中的行为确实不同。您可能应该在问题中明确说明。