Python:为什么临时抑制后会打印两次警告?

Python: why is warning printed twice following temporary suppression?

提问人:Patrick 提问时间:2/26/2021 最后编辑:Patrick 更新时间:3/4/2021 访问量:239

问:

似乎暂时禁止显示警告会使上下文管理器之外的重复警告重复显示。

例:

import warnings

def f():

    with warnings.catch_warnings():
        warnings.simplefilter("ignore", category=Warning)
        print("A")

    print("B")
    warnings.warn("My warning")


f()
f()

输出:

A
B
tmp2.py:10: UserWarning: My warning
  warnings.warn("My warning")
A
B
tmp2.py:10: UserWarning: My warning
  warnings.warn("My warning")

此外,我给什么动作和类别似乎并不重要。simplefilter

另一方面,如果我注释掉上下文块, 则警告仅显示一次(按预期)。catch_warnings

为什么?这是一个错误吗?我错过了什么?

python 警告 suppress-warnings

评论


答:

1赞 Patrick 3/4/2021 #1

这是一个已知的错误这里也问过一个看起来很陈旧的 PR