Spec-Zone.ru › NumPy 2.0

numpy.testing.suppress_warnings

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

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

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

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

Параметры:
forwarding_rulestr, необязательно

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

Примечания

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

Когда добавляется фильтр записи, соответствующие предупреждения сохраняются в атрибуте log а также в списке, возвращённом record.

Если фильтры добавляются и указан ключевой параметр module, регистр предупреждений этого модуля дополнительно будет очищен при применении, входе в контекст или выходе из него. Это может привести к повторному появлению предупреждений после выхода из контекста, если они были настроены на вывод один раз (по умолчанию) и уже были выведены до входа в контекст.

Вложенность этого менеджера контекста будет работать как ожидается, когда forwarding rule равно «always» (по умолчанию). Неотфильтрованные и неотслеженные предупреждения будут переданы и будут соответствовать внешнему уровню. На внешнем уровне они будут выведены (или перехвачены другим контекстом предупреждений). Аргумент forwarding_rule может изменить это поведение.

Как и 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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.testing.suppress_warnings.html

Spec-Zone.ru

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