如何列出 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")
删除它会删除警告。万岁!我打算删除那段代码,但我对两件事感到好奇:
我能不能以某种方式避免对此进行二进制搜索?启用TRACEMALLOC=1
完全无效(可能是因为这是我们导入的第三方代码?)
删除它后,有没有办法列出在代码中特定点应用的所有警告过滤器?好像是很重要的东西,能够分析,但是我不知道怎么分析。
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)]
我刚刚花了一天时间试图从我的输出中删除这个警告:
sys:1: ResourceWarning: unclosed file <_io.TextIOWrapper name='/dev/null' mode='w' encoding='UTF-8'>
我刚刚完成了对大约 10 万行代码的二进制搜索,试图弄清楚这一点。我仍然没有找到让 /dev/null
打开的原因,但我确实发现我们的一些代码说:
warnings.simplefilter("always")
删除它会删除警告。万岁!我打算删除那段代码,但我对两件事感到好奇:
我能不能以某种方式避免对此进行二进制搜索?启用
TRACEMALLOC=1
完全无效(可能是因为这是我们导入的第三方代码?)删除它后,有没有办法列出在代码中特定点应用的所有警告过滤器?好像是很重要的东西,能够分析,但是我不知道怎么分析。
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)]