все Python 3warningsфункция
warnings.warn()
выдача предупреждений
Выдаёт предупреждение — сообщение о проблеме, которое не прерывает программу; показывать ли его, решают фильтры. Категория по умолчанию — UserWarning.
Синтаксис
warnings.warn(message, category=None, stacklevel=1, source=None, *, skip_file_prefixes=())
В отличие от raise, warn не останавливает выполнение: функция работает дальше, а сообщение уходит в stderr, и то лишь если фильтры его пропустят; одинаковое предупреждение из одной строки по умолчанию выводится один раз, хоть в цикле. В отличие от logging, адресат — не тот, кто следит за работающей программой, а программист, который вызывает ваш код: «функция устарела», «аргумент станет обязательным». Фильтр 'error' (ключ -W error) превращает предупреждение в исключение. stacklevel=2 указывает на строку вызывающего, а не на сам warn.
Примеры
import warnings
def area(r, unit=None):
if unit is None:
warnings.warn('укажите unit явно', FutureWarning, stacklevel=2)
return 3 * r * r
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter('always')
print(area(2)) # → 12
print(caught[0].category.__name__, caught[0].lineno) # → FutureWarning 8
import warnings
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter('default', DeprecationWarning)
for _ in range(3):
warnings.warn('старый вызов', DeprecationWarning)
print(len(caught)) # → 1
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности