все Python 3warningsфункция
warnings.warn_explicit()
выдача предупреждений
Низкоуровневый warn(), где файл, строку и модуль предупреждения задают явно — для предупреждений о конфигурации, шаблонах и других не-Python файлах.
Синтаксис
warnings.warn_explicit(message, category, filename, lineno, module=None, registry=None, module_globals=None, source=None)
warn() сам вычисляет место по стеку вызовов, а warn_explicit берёт filename и lineno из аргументов — так загрузчик конфигурации указывает на строку в settings.ini, а не на свой исходный код. Без registry каждое предупреждение считается первым: действия 'default' и 'module' работают как 'always', и повторы в цикле не схлопнутся. Чтобы повторы подавлялись, передавайте один и тот же словарь registry.
Примеры
import warnings
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter('default')
for _ in range(2):
warnings.warn_explicit('ключ устарел', UserWarning, 'settings.ini', 12)
print(len(caught), caught[0].filename, caught[0].lineno) # → 2 settings.ini 12
import warnings
registry = {}
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter('default')
for _ in range(2):
warnings.warn_explicit('ключ устарел', UserWarning, 'settings.ini', 12,
registry=registry)
print(len(caught)) # → 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности