当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python numpy testing.suppress_warnings用法及代码示例


本文简要介绍 python 语言中 numpy.testing.suppress_warnings 的用法。

用法:

class  numpy.testing.suppress_warnings(forwarding_rule='always')

上下文管理器和装饰器的作用与 warnings.catch_warnings 大致相同。

但是,它还提供了一种过滤机制来解决 https://bugs.python.org/issue4180 问题。

此错误导致 3.4 之前的 Python 在被忽略一次后无法可靠地再次显示警告(即使在 catch_warnings 内)。这意味着不能轻松使用 “ignore” 过滤器,因为以下测试可能需要查看警告。此外,它允许更轻松地测试警告的特异性,并且可以嵌套。

参数

forwarding_rule str,可选

“always”, “once”, “module” 或 “location” 之一。类似于通常的警告模块过滤器模式,主要在最外层减少噪音很有用。将根据此规则转发未抑制和未记录的警告。默认为“always”。 “location” 等价于警告 “default”,与警告警告的确切位置相匹配。

注意

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

添加记录过滤器后,匹配的警告将存储在 log 属性以及 record 返回的列表中。

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

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

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

相关用法


注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.testing.suppress_warnings。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。