【发布时间】:2014-10-25 14:53:55
【问题描述】:
Python 3.2 为未关闭的系统资源(网络套接字、文件)引入了ResourceWarning:
虽然代码在生产环境中运行良好,但在运行单元测试时,由于使用了出现警告的第三方库,我收到了很多以下警告。我可以修复该库,但另一方面,在测试运行期间忽略它要简单得多。
block_io-python/block_io/__init__.py:182: ResourceWarning: unclosed <ssl.SSLSocket fd=11, family=AddressFamily.AF_INET, type=SocketType.SOCK_STREAM, proto=6, laddr=('x', 58395), raddr=('x, 443)>
禁用这些警告的方法是什么?我尝试了以下但没有效果:
warnings.filterwarnings("ignore", category=ResourceWarning)
(在单元测试导入期间运行)。
【问题讨论】:
-
如果明显的行为不起作用并且我不知道我做错了什么,也许我可以被允许? :)
-
可能是发出警告的模块正在使用
warnings.showwarning。该功能似乎绕过了警告过滤器。 -
也许第三方代码还添加了一个
warnings.filterwarnings('default', category=ResourceWarning),它会通过放在它前面来覆盖您的代码?如果@Dunes 理论是正确的,您可以在上下文管理器with warnings.catch_warnings():中覆盖warnings.showwarning -
@greschd:我将测试上下文管理器以排除其他人篡改警告的可能性。谢谢你的想法。
-
fossies.org/dox/Python-3.4.2/socketmodule_8c_source.html 中的第 3855 行是发出警告的位置。在我看来一切都很好。可能的问题是测试工具正在消除模块的
__warningregistry__,或者您正在使用在调试模式下编译的python。只有在调试模式下编译 python 时,才会默认显示资源警告。也许在调试模式下无法隐藏警告...
标签: python python-3.x