numpy.testing.suppress_warnings
-
class numpy.testing.suppress_warnings(forwarding_rule='always')[source] -
Менеджер контекста и декоратор, выполняющий примерно то же, что и
warnings.catch_warnings.Однако он также предоставляет механизм фильтрации для решения проблемы http://bugs.python.org/issue4180.
Эта ошибка приводит к тому, что Python до версии 3.4 ненадёжно отображает предупреждения после их игнорирования (даже в рамках catch_warnings). Это означает, что лёгкий использование фильтра «ignore» невозможен, так как последующие тесты могут потребовать видеть предупреждение. Кроме того, это позволяет более точно тестировать предупреждения и может быть вложенным.
Параметры: -
forwarding_rule : str, optional -
Одно из значений «always», «once», «module» или «location». Аналогично обычному режиму фильтра модуля warnings, он полезен для уменьшения шума в основном на внешнем уровне. Не подавленные и не зарегистрированные предупреждения будут передаваться в соответствии с этим правилом. По умолчанию устанавливается «always». «location» эквивалентно предупреждению warnings «default», совпадает с точным местоположением источника предупреждения.
Примечания
Фильтры, добавленные внутри менеджера контекста, будут удалены при выходе из него. При входе все фильтры, определённые вне контекста, будут автоматически применены.
При добавлении фильтра записи соответствующие предупреждения хранятся в атрибуте
logа также в списке, возвращаемомrecord.Если фильтры добавлены и указан параметр
module, регистр предупреждений этого модуля дополнительно будет очищен при его применении, входе в контекст или выходе из него. Это может привести к повторному появлению предупреждений после выхода из контекста, если они были настроены на вывод один раз (по умолчанию) и уже были выведены до входа в контекст.Вложенность этого менеджера контекста будет работать как ожидается, когда правило передачи — «always» (по умолчанию). Неотфильтрованные и незарегистрированные предупреждения будут переданы наружу и будут соответствовать внешнему уровню. На внешнем уровне они будут выведены (или пойманы другим контекстом предупреждений). Аргумент правила передачи может изменить это поведение.
Как и
catch_warnings, этот менеджер контекста не потокобезопасен.Примеры
>>> with 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 = suppress_warnings() >>> sup.filter(module=np.ma.core) # module must match exact >>> @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–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.15.4/reference/generated/numpy.testing.suppress_warnings.html