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)
(在单元测试导入期间运行)。
我找到了罪犯。你说你在导入时设置了过滤器。但是,自Python 3.2以来,unittest模块已经更新,将警告过滤器设置为默认值。见Section 29.5.5。基本上,
unittest
在导入完模块后覆盖警告过滤器首选项。例如。
我的测验.py
给出以下输出
解决方案
每次测试后出现
unittest
以重置警告筛选器。所以每次测试开始时都要清除过滤器。最好使用decorator包装测试函数。unittest.main(警告='ignore')
这个选择对我有效:
见:Standard Library docs - Overriding the default filter
相关问题 更多 >
编程相关推荐