все Python 3warningsпонятие
warnings.catch_warnings
фильтры
Менеджер контекста: сохраняет фильтры предупреждений и восстанавливает их на выходе; с record=True собирает предупреждения в список вместо вывода.
Синтаксис
with warnings.catch_warnings(*, record=False, action=None, category=Warning): ...
simplefilter() и filterwarnings() меняют настройки всего процесса; внутри with catch_warnings(): изменения откатятся на выходе — так глушат предупреждения точечно. С record=True предупреждения не печатаются, а копятся в списке — так их проверяют в тестах; но без simplefilter('always') внутри блока одинаковые предупреждения из одной строки (например, в цикле) запишутся один раз. В обычной сборке менеджер меняет глобальное состояние и не потокобезопасен.
Примеры
import warnings
def legacy():
warnings.warn('устарело', UserWarning)
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter('always')
legacy()
legacy()
print(len(caught), caught[0].category.__name__) # → 2 UserWarning
# Python 3.11+
import warnings
with warnings.catch_warnings(action='error'):
try:
warnings.warn('устарело', UserWarning)
except UserWarning as e:
print('стало исключением:', e) # → стало исключением: устарело
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности