Python Glossary English

все 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Сообщить о неточности