numpy.testing.suppress_warnings#
- класс numpy.testing.suppress_warnings(forwarding_rule='always', _warn=True)[источник]#
Контекстный менеджер и декоратор, делающий почти то же самое, что и
warnings.catch_warnings.Однако он также предоставляет механизм фильтрации для обхода https://bugs.python.org/issue4180.
Эта ошибка приводит к тому, что Python до версии 3.4 не показывает предупреждения надежно после того, как они были проигнорированы один раз (даже внутри catch_warnings). Это означает, что фильтр "ignore" нельзя легко использовать, поскольку последующие тесты могут нуждаться в предупреждении. Кроме того, это позволяет более легко специфицировать тестирование предупреждений и может быть вложенным.
Устарело с версии 2.4: Это устарело. Используйте
warnings.filterwarningsилиpytest.filterwarningsвместо этого.- Параметры:
- forwarding_rulestr, optional
Одно из значений "always", "once", "module" или "location". Аналогично обычному режиму фильтра модуля warnings, полезно для уменьшения шума в основном на внешнем уровне. Неподавленные и незарегистрированные предупреждения будут перенаправлены на основе этого правила. По умолчанию "always". "location" эквивалентно "default" в warnings, совпадение по точному местоположению, откуда возникло предупреждение.
Примечания
Фильтры, добавленные внутри контекстного менеджера, будут снова удалены при выходе из него. При входе все фильтры, определенные вне контекста, будут применены автоматически.
Когда добавляется фильтр записи, соответствующие предупреждения сохраняются в
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
Методы
__call__(func)Декоратор функции для применения определённых подавлений ко всей функции.
filter([category, message, module])Добавить новый подавляющий фильтр или применить его, если состояние введено.
record([category, message, module])Добавить новый фильтр записи или применить его, если состояние введено.