numpy.testing.
suppress_warnings
上下文管理器和修饰器与 warnings.catch_warnings .
warnings.catch_warnings
但是,它还提供了一个过滤机制来处理https://bugs.python.org/issue4180。
这个bug导致3.4之前的python在被忽略一次之后(甚至在catch_警告中)不再可靠地显示警告。这意味着没有“忽略”过滤器可以很容易地使用,因为下面的测试可能需要看到警告。此外,它允许对警告进行更简单的测试,并且可以嵌套。
“始终”、“一次”、“模块”或“位置”中的一个。与通常的警告模块过滤模式类似,主要是在最外面的级别上减少噪音是很有用的。将根据此规则转发未批准和未记录的警告。默认为“始终”。“位置”相当于“默认”警告,按警告的确切位置匹配。
笔记
在上下文管理器中添加的筛选器将在离开时再次被丢弃。当输入在上下文之外定义的所有过滤器时,将自动应用。
添加录制筛选器时,匹配的警告将存储在 log 属性以及在由返回的列表中 record .
log
record
如果添加了过滤器, module 如果给定关键字,则在应用、输入上下文或退出该模块时,还会清除该模块的警告注册表。如果将警告配置为打印一次(默认),并且在输入上下文之前已打印,则这可能会导致警告在离开上下文后第二次出现。
module
当转发规则为“始终”(默认)时,嵌套此上下文管理器将按预期工作。未过滤和未记录的警告将被传递出来,并由外部级别匹配。在最外层,它们将被打印(或被另一个警告上下文捕获)。转发规则参数可以修改此行为。
喜欢 catch_warnings 此上下文管理器不是线程安全。
catch_warnings
实例
使用上下文管理器:
with np.testing.suppress_warnings() as sup: sup.filter(DeprecationWarning, "Some text") sup.filter(module=np.ma.core) log = sup.record(FutureWarning, "Does this occur?") command_giving_warnings() # The FutureWarning was given once, the filtered warnings were # ignored. All other warnings abide outside settings (may be # printed/error) assert_(len(log) == 1) assert_(len(sup.log) == 1) # also stored in log attribute
或者作为装饰师:
sup = np.testing.suppress_warnings() sup.filter(module=np.ma.core) # module must match exactly @sup def some_function(): # do something which causes a warning in np.ma.core pass
方法
__call__ (FUNC)
__call__
函数修饰器对整个函数应用某些抑制。
filter \ [category, message, module] )
filter
添加新的抑制筛选器,或者在输入状态时应用它。
record \ [category, message, module] )
附加一个新的录制筛选器,或者在输入状态时应用它。