Python 3.13+warningsпонятие
warnings.deprecated
выдача предупреждений
Декоратор (с 3.13), помечающий функцию или класс устаревшими: при использовании выдаётся DeprecationWarning, а type checker подсвечивает вызов.
Синтаксис
@warnings.deprecated(message, /, *, category=DeprecationWarning, stacklevel=1)
Работает в двух мирах сразу: mypy и pyright видят пометку статически, а при выполнении каждый вызов функции, создание экземпляра или подкласса выдаёт DeprecationWarning с указанием на строку вызывающего. Это обычное предупреждение, и фильтры действуют на него как на любое: вне __main__ по умолчанию его не увидят. category=None оставляет только статическую пометку. Для версий до 3.13 тот же декоратор есть в typing_extensions; текст хранится в атрибуте __deprecated__.
Примеры
from warnings import deprecated, catch_warnings, simplefilter
@deprecated('используйте new_api()')
def old_api():
return 42
with catch_warnings(record=True) as caught:
simplefilter('always', DeprecationWarning)
print(old_api()) # → 42
print(caught[0].category is DeprecationWarning) # → True
print(old_api.__deprecated__) # → используйте new_api()
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности