有没有办法一次重置所有加载函数的__warningregistry__
?在
我想强制使用“一次”筛选器筛选的所有警告再次显示。除了对加载的每个函数(包括导入模块的函数)调用<func>.__globals__['__warningregistry__'].clear()
之外,我找不到其他方法来实现这一点
因此,我需要一个类似warnings.clear()
函数来执行以下操作:
>>> import warnings
>>> warnings.warn('blah')
WARNING:root:blah ->UserWarning at ...
>>> warnings.warn('blah')
>>> warnings.clear()
>>> warnings.warn('blah')
WARNING:root:blah ->UserWarning at ...
我希望这个warnings.clear()
函数也能清除所有的警告注册表,而不仅仅是当前的名称空间。在
这已经存在了吗?也许我遗漏了一些明显的东西,或者模块使用不当?在
我不相信这个功能存在,至少在2.7.6中没有。我看了看警告.py我和c没有找到任何可以用来做这件事的东西。在
我在想也许你可以包装这个模块并重写列表中的
warn()
调用,将globals()[''\'uwarningregistry\']放到一个列表中,然后添加一个新的clear()
函数来循环它并为所有调用重置注册表。在这个功能似乎并不直接存在于Python中。在
但是,我需要为我自己的库的unittests提供类似的功能,并且开发了一个上下文管理器,它可以备份整个进程的警告注册表状态,清除它,然后在上下文完成后恢复它。在
这里的文章有点太长了,但是我已经将它作为解决python bug 21724的潜在起点提交,因此您应该能够直接从http://bugs.python.org/file40031/reset_warning_registry.py下载并使用它
用法如下:
相关问题 更多 >
编程相关推荐