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