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