numpy.testing.suppress_warnings

class numpy.testing.suppress_warnings(forwarding_rule='always')[源代码]

上下文管理器和修饰器与 warnings.catch_warnings .

但是,它还提供了一个过滤机制来处理https://bugs.python.org/issue4180。

这个bug导致3.4之前的python在被忽略一次之后(甚至在catch_警告中)不再可靠地显示警告。这意味着没有“忽略”过滤器可以很容易地使用,因为下面的测试可能需要看到警告。此外,它允许对警告进行更简单的测试,并且可以嵌套。

参数
forwarding_rule可选的STR

“始终”、“一次”、“模块”或“位置”中的一个。与通常的警告模块过滤模式类似,主要是在最外面的级别上减少噪音是很有用的。将根据此规则转发未批准和未记录的警告。默认为“始终”。“位置”相当于“默认”警告,按警告的确切位置匹配。

笔记

在上下文管理器中添加的筛选器将在离开时再次被丢弃。当输入在上下文之外定义的所有过滤器时,将自动应用。

添加录制筛选器时,匹配的警告将存储在 log 属性以及在由返回的列表中 record .

如果添加了过滤器, module 如果给定关键字,则在应用、输入上下文或退出该模块时,还会清除该模块的警告注册表。如果将警告配置为打印一次(默认),并且在输入上下文之前已打印,则这可能会导致警告在离开上下文后第二次出现。

当转发规则为“始终”(默认)时,嵌套此上下文管理器将按预期工作。未过滤和未记录的警告将被传递出来,并由外部级别匹配。在最外层,它们将被打印(或被另一个警告上下文捕获)。转发规则参数可以修改此行为。

喜欢 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)

函数修饰器对整个函数应用某些抑制。

filter \ [category, message, module] )

添加新的抑制筛选器,或者在输入状态时应用它。

record \ [category, message, module] )

附加一个新的录制筛选器,或者在输入状态时应用它。