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)