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_rule : str, optional -
Один из «always», «once», «module» или «location». Аналогичен обычному режиму фильтра модуля warnings, он полезен для уменьшения шума в основном на внешнем уровне. Неподавленные и незарегистрированные предупреждения будут пересылаться в соответствии с этим правилом. По умолчанию «always». «location» эквивалентно предупреждению warnings «default», соответствие по точному местоположению, из которого возникло предупреждение.
Примечания
Фильтры, добавленные внутри менеджера контекста, будут удалены при выходе из него. При входе в него автоматически применяются все фильтры, определённые вне контекста.
Когда добавляется фильтр записи, соответствующие предупреждения хранятся в атрибуте
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__(self, func)Декоратор функции для применения определённых подавлений к всей функции. filter(self[, category, message, module])Добавление нового фильтра подавления или его применение, если состояние введено. record(self[, category, message, module])Добавление нового фильтра записи или его применение, если состояние введено. -
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/generated/numpy.testing.suppress_warnings.html