當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。