import warnings warnings.catch_warnings(*, record=False, module=None, action=None, category=Warning, lineno=0, append=False)
record=False
- управляет возвращаемым значением,module=None
- тестирования самого модуля warnings
,action=None
- если True
, то разрешает передачу аргументов из warnings.simplefilter()
(добавлен в Python 3.11),category=Warning
- смотри описание warnings.simplefilter()
(добавлен в Python 3.11),lineno=0
- смотри описание warnings.simplefilter()
(добавлен в Python 3.11),append=False
- смотри описание warnings.simplefilter()
(добавлен в Python 3.11).None
или список объектов функции warnings.showwarning()
.Класс catch_warnings()
модуля warnings
представляет собой менеджер контекста, который копирует и при выходе восстанавливает фильтр предупреждений и функцию warnings.showwarning()
.
Если аргумент record=False
(по умолчанию), менеджер контекста возвращает None
при входе. Если для record
задано значение True
, то возвращается список, который постепенно заполняется объектами, видимыми пользовательской функцией warnings.showwarning()
]warnings.showwarning, которая также подавляет вывод в sys.stdout
. Каждый объект в списке имеет атрибуты с теми же именами, что и аргументы функции warnings.showwarning()
.
Аргумент module
принимает модуль, который будет использоваться вместо модуля, возвращаемого при импорте warnings
, чей фильтр будет защищен. Этот аргумент существует главным образом для тестирования самого модуля warnings
.
Если аргумент action
не равен None
, то остальные аргументы передаются warnings.simplefilter()
, как если бы он был вызван сразу при входе в контекст.
Примечание. Менеджер контекста warnings.catch_warnings()
работает путем замены, а затем восстановления функции warnings.showwarning()
модуля и внутреннего списка спецификаций фильтров. Это означает, что менеджер контекста изменяет глобальное состояние и поэтому не является потокобезопасным.
Изменено в версии 3.11: добавлены параметры action
, category
, lineno
и append
, которые предоставляют более лаконичный способ локального игнорирования предупреждений или преобразования их в ошибки.
warnings.catch_warnings()
.Можно временно отключить предупреждения с помощью контекстного менеджера warnings.catch_warnings()
import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(): warnings.simplefilter("ignore") fxn()
Или делаем так, что все предупреждения по умолчанию были отключены ignore
, а при тестировании делаем так:
import warnings def fxn(): warnings.warn("deprecated", DeprecationWarning) with warnings.catch_warnings(record=True) as w: # делаем так, чтобы все предупреждения всегда срабатывали. warnings.simplefilter("always") # Вызываем предупреждение. fxn() # А здесь тестируем assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message)