Spec-Zone.ru › NumPy 1.20

numpy.testing.suppress_warnings

class numpy.testing.suppress_warnings(forwarding_rule='always') [source]

Менеджер контекста и декоратор, выполняющий примерно то же, что и warnings.catch_warnings.

Однако он также предоставляет механизм фильтрации для решения проблемы https://bugs.python.org/issue4180.

Эта ошибка приводит к тому, что Python до версии 3.4 ненадёжно отображает предупреждения после их игнорирования (даже внутри catch_warnings). Это означает, что легко нельзя использовать фильтр «ignore», так как последующие тесты могут потребовать увидеть предупреждение. Кроме того, это позволяет проще задавать специфичность для тестирования предупреждений и может использоваться вложенно.

Параметры
forwarding_rulestr, optional

Один из «всегда», «один раз», «модуль» или «местоположение». Аналогично обычному режиму фильтрации модуля предупреждений, он полезен для уменьшения шума в основном на внешнем уровне. Неподавляемые и незарегистрированные предупреждения будут пересылаться в соответствии с этим правилом. По умолчанию — «всегда». «местоположение» эквивалентно предупреждению «по умолчанию», сопоставляется с точным местоположением, откуда исходит предупреждение.

Примечания

Фильтры, добавленные внутри менеджера контекста, будут удалены при выходе из него. При входе будут автоматически применяться все фильтры, определённые вне контекста.

Когда добавляется фильтр записи, соответствующие предупреждения сохраняются в атрибуте 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])

Добавление нового фильтра записи или его применение, если состояние запущено.

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.testing.suppress_warnings.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API