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

Python: why is warning printed twice following temporary suppression?

似乎 temporarily suppressing warnings 重复警告 在上下文管理器之外 重复显示。

示例:

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 块, 然后警告只显示一次(按预期)。

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

这是一个known bug 还询问了 here PR 看起来很陈旧