Сообщить об ошибке.

Фильтр предупреждений warnings

Фильтр предупреждений определяет, будут ли предупреждения игнорироваться, отображаться или превращаться в ошибки, вызывая исключение.

Концептуально фильтр предупреждений поддерживает упорядоченный список спецификаций фильтра. Любое конкретное предупреждение сопоставляется с каждой спецификацией фильтра в списке по очереди, пока не будет найдено совпадение. Фильтр определяет расположение совпадения. Каждая запись представляет собой кортеж формы (action, message, category, module, lineno), где:

  • action - это одна из следующих строк:
    ЗначениеПравило поведения
    'default'Вывести первое вхождение соответствующих предупреждений для каждого местоположения (модуль + номер строки), где выдается предупреждение
    'error'Превратить соответствующие предупреждения в исключения
    'ignore'Никогда не печатать соответствующие предупреждения
    'always'Всегда печатать соответствующие предупреждения
    'module'Вывести первое вхождение соответствующих предупреждений для каждого модуля, в котором выдается предупреждение (независимо от номера строки)
    'once'Печатать только первое появление совпадающих предупреждений, независимо от местоположения
  • message - это строка, содержащая регулярное выражение, которому должно соответствовать начало предупреждающего сообщения. Выражение составляется без учета регистра.
  • category - это категория из таблицы категорий предупреждений.
  • module - это строка, содержащая регулярное выражение, которому должно соответствовать имя модуля. Выражение составляется с учетом регистра.
  • lineno - это целое число, которое должно совпадать с номером строки, где произошло предупреждение или 0, чтобы соответствовать всем номерам строк.

Поскольку класс Warning является производным от встроенного класса Exception, чтобы превратить предупреждение в ошибку, мы просто поднимаем raise category(message).

Если предупреждение появляется и не соответствует ни одному зарегистрированному фильтру, применяется действие по умолчанию, отсюда и его имя.

Описание фильтров предупреждений.

Фильтр предупреждений инициализируется параметрами -W, передаваемыми в командную строку интерпретатора Python и в переменную среды PYTHONWARNINGS. Интерпретатор сохраняет аргументы для всех предоставленных записей без интерпретации в sys.warnoptions. Модуль warnings анализирует их при первом импорте, недопустимые параметры игнорируются после печати сообщения в sys.stderr.

Фильтры отдельных предупреждений указываются в виде последовательности полей, разделенных двоеточиями:

action:message:category:module:line

Значение каждого из этих полей описано выше. При перечислении нескольких фильтров в одной строке, отдельные фильтры разделяются запятыми, а фильтры перечисленные позже, имеют приоритет над теми, которые перечислены до них.

Обычно используемые фильтры предупреждений применяются ко всем предупреждениям, предупреждениям в определенной категории или предупреждениям, выданным определенными модулями или пакетами. Некоторые примеры:

# Показать все предупреждения 
# даже те, которые игнорируются по умолчанию
default

# Игнорировать все предупреждения
ignore

# Конвертировать все предупреждения в ошибки
error

# Обрабатывать сообщения ResourceWarning как ошибки
error::ResourceWarning

# Показать сообщения DeprecationWarning
default::DeprecationWarning

# Сообщать только о предупреждениях,
# вызванных 'mymodule'
ignore,default:::mymodule

# Преобразование предупреждений об ошибках 
# в 'mymodule' и любых подпакетах 'mymodule'
error:::mymodule[.*]