По умолчанию Python устанавливает несколько фильтров предупреждений, которые можно переопределить с помощью параметра командной строки -W, переменной среды PYTHONWARNINGS
и вызовов функции warnings.filterwarnings()
.
Фильтр предупреждений по умолчанию содержит следующие записи (в порядке приоритета):
default::DeprecationWarning:__main__ ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarning
Разработчики приложений, написанных на Python, могут захотеть скрыть все предупреждения уровня Python от своих пользователей по умолчанию и отображать их только при выполнении тестов или другой работе с приложением. Атрибут sys.warnoptions
, используемый для передачи конфигураций фильтра интерпретатору, можно использовать в качестве маркера, чтобы указать, следует ли отключать предупреждения:
import sys if not sys.warnoptions: import warnings warnings.simplefilter("ignore")
Для тестируемого кода Python рекомендуется обеспечить отображение всех предупреждений по умолчанию, для этого используя такой код:
import sys if not sys.warnoptions: import os, warnings # Изменить фильтр в этом процессе warnings.simplefilter("default") # Также влияет на подпроцессы os.environ["PYTHONWARNINGS"] = "default"
Наконец, разработчикам интерактивных оболочек, которые запускают пользовательский код в пространстве имен, отличном от __main__
, рекомендуется обеспечить отображение сообщений DeprecationWarning
по умолчанию, используя следующий код, где user_ns
- это модуль, используемый для выполнения кода, введенного в интерактивном режиме:
import warnings warnings.filterwarnings("default", category=DeprecationWarning, module=user_ns.get("__name__"))