如何列出 Python 中的所有警告过滤器?

How do you list all warning filters in Python?

我刚刚花了一天时间试图从我的输出中删除这个警告:

sys:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='/dev/null' mode='w' encoding='UTF-8'>

我刚刚完成了对大约 10 万行代码的二进制搜索,试图弄清楚这一点。我仍然没有找到让 /dev/null 打开的原因,但我确实发现我们的一些代码说:

warnings.simplefilter("always")

删除它会删除警告。万岁!我打算删除那段代码,但我对两件事感到好奇:

  1. 我能不能以某种方式避免对此进行二进制搜索?启用TRACEMALLOC=1完全无效(可能是因为这是我们导入的第三方代码?)

  2. 删除它后,有没有办法列出在代码中特定点应用的所有警告过滤器?好像是很重要的东西,能够分析,但是我不知道怎么分析。

grep import warnings(或 from 变体)。 这不像是常见的导入内​​容。

执行完别人的代码后, 你可以随时

warnings.simplefilter("ignore")

禁用他们启用的功能, 即使不查看他们的源代码。


您可以通过以下方式查看当前过滤器:

>>> import warnings
>>> import pprint
>>> pprint.pprint(warnings.filters)
[('default', None, <class 'DeprecationWarning'>, '__main__', 0),
 ('ignore', None, <class 'DeprecationWarning'>, None, 0),
 ('ignore', None, <class 'PendingDeprecationWarning'>, None, 0),
 ('ignore', None, <class 'ImportWarning'>, None, 0),
 ('ignore', None, <class 'ResourceWarning'>, None, 0)]