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

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

Содержание:

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

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

  • action - это одна из следующих строк:
ЗначениеПравило поведения
'default'Вывести первое вхождение соответствующих предупреждений для каждого местоположения (модуль + номер строки), где выдается предупреждение
'error'Превратить соответствующие предупреждения в исключения
'ignore'Никогда не печатать соответствующие предупреждения
'always'Всегда печатать соответствующие предупреждения
'module'Вывести первое вхождение соответствующих предупреждений для каждого модуля, в котором выдается предупреждение (независимо от номера строки)
'once'Печатать только первое появление совпадающих предупреждений, независимо от местоположения
- `message` - это строка, содержащая [регулярное выражение][m-re], которому должно соответствовать начало предупреждающего сообщения. Выражение составляется без учета регистра.- `category` - это категория из [таблицы категорий предупреждений][warnings.categor].- `module` - это строка, содержащая [регулярное выражение][m-re], которому должно соответствовать имя модуля. Выражение составляется с учетом регистра.- `lineno` - это [целое число][t-int], которое должно совпадать с номером строки, где произошло предупреждение или 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[.*]