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