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). Это означает, что фильтры «игнорировать» нельзя легко использовать, так как последующие тесты могут потребоваться предупреждение. Кроме того, это позволяет более точно проверять предупреждения и может быть вложенным.
Параметры: forwarding_rule : str, optional
Одно из «всегда», «один раз», «модуль» или «местоположение». Аналогично обычному режиму фильтра модуля предупреждений, он полезен для уменьшения шума в основном на верхнем уровне. Не подавленные и не записанные предупреждения будут передаваться в соответствии с этим правилом. По умолчанию «всегда». «местоположение» эквивалентно предупреждениям «по умолчанию», соответствует точному местоположению, откуда исходит предупреждение.
Примечания
Фильтры, добавленные внутри менеджера контекста, будут удалены при выходе из него. При входе все фильтры, определённые вне контекста, будут автоматически применены.
При добавлении фильтра записи соответствующие предупреждения хранятся в атрибуте
log, а также в списке, возвращаемомrecord.Если фильтры добавляются и ключевое слово
moduleзадано, реестр предупреждений этого модуля дополнительно будет очищен при его применении, входе в контекст или выходе из него. Это может привести к повторному появлению предупреждений после выхода из контекста, если они были настроены на вывод один раз (по умолчанию) и уже были выведены до входа в контекст.Вложенность этого менеджера контекста будет работать как ожидается, когда правило переадресации «всегда» (по умолчанию). Неотфильтрованные и незаписанные предупреждения будут передаваться и будут соответствовать внешнему уровню. На внешнем уровне они будут выводиться (или будут пойманы другим контекстом предупреждений). Аргумент правила переадресации может изменить это поведение.
Как и
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.14.5/reference/generated/numpy.testing.suppress_warnings.html