frame.md
1> **Источник:** https://python-all.ru/3/c-api/frame.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты фреймов89#### `type PyFrameObject`1011*Часть [Limited API](https://python-all.ru/3/c-api/stable.html#stable) (как непрозрачная структура).*1213C-структура объектов, используемая для описания объектов фреймов.1415В этой структуре нет открытых членов.1617Изменено в версии 3.11: Члены этой структуры были удалены из публичного C API. Подробнее см. в [статью «Что нового»](https://python-all.ru/3/whatsnew/3.11.html#pyframeobject-3-11-hiding) .1819Функции [`PyEval_GetFrame()`](https://python-all.ru/3/c-api/reflection.html#c.PyEval_GetFrame) и [`PyThreadState_GetFrame()`](https://python-all.ru/3/c-api/threads.html#c.PyThreadState_GetFrame) можно использовать для получения объекта фрейма.2021См. также [Отражение](https://python-all.ru/3/c-api/reflection.html#reflection).2223#### `PyTypeObject PyFrame_Type`2425Тип объектов фреймов. Это тот же объект, что и [`types.FrameType`](https://python-all.ru/3/library/types.html#types.FrameType) на уровне Python.2627Изменено в версии 3.11: Ранее этот тип был доступен только после включения `<frameobject.h>`.2829#### `PyFrameObject *PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals, PyObject *locals)`3031Создаёт новый объект фрейма. В случае успеха эта функция возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference) на новый объект фрейма, а в случае неудачи возвращает `NULL` с установленным исключением.3233#### `int PyFrame_Check(PyObject *obj)`3435Возвращает ненулевое значение, если *obj* является объектом фрейма.3637Изменено в версии 3.11: Ранее эта функция была доступна только после включения `<frameobject.h>`.3839#### `PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)`4041*Возвращаемое значение: новая ссылка.*4243Получает следующий внешний фрейм *frame*.4445Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference) или `NULL`, если у *frame* нет внешнего фрейма. Не вызывает исключений.4647Добавлено в версии 3.9.4849#### `PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)`5051*Возвращаемое значение: новая ссылка.*5253Получить атрибут [`f_builtins`](https://python-all.ru/3/reference/datamodel.html#frame.f_builtins) *фрейма*.5455Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference). Результат не может быть `NULL`.5657Добавлено в версии 3.12.5859#### `PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)`6061*Возвращаемое значение: новая ссылка.*6263*Часть [Stable ABI](https://python-all.ru/3/c-api/stable.html#stable) начиная с версии 3.10.*6465Получает код *frame*.6667Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference).6869Результат (код фрейма) не может быть `NULL`.7071Добавлено в версии 3.9.7273#### `PyObject *PyFrame_GetGenerator(PyFrameObject *frame)`7475*Возвращаемое значение: новая ссылка.*7677Получает генератор, корутину или асинхронный генератор, которому принадлежит этот фрейм, или `NULL`, если фрейм не принадлежит генератору. Не вызывает исключения, даже если возвращаемое значение равно `NULL`.7879Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference) или `NULL`.8081Добавлено в версии 3.12.8283#### `PyObject *PyFrame_GetGlobals(PyFrameObject *frame)`8485*Возвращаемое значение: новая ссылка.*8687Получить атрибут [`f_globals`](https://python-all.ru/3/reference/datamodel.html#frame.f_globals) *фрейма*.8889Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference). Результат не может быть `NULL`.9091Добавлено в версии 3.12.9293#### `int PyFrame_GetLasti(PyFrameObject *frame)`9495Получить атрибут [`f_lasti`](https://python-all.ru/3/reference/datamodel.html#frame.f_lasti) *фрейма*.9697Возвращает -1, если `frame.f_lasti` равно `None`.9899Добавлено в версии 3.12.100101#### `PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)`102103*Возвращаемое значение: новая ссылка.*104105Получить *имя* переменной из *фрейма*.106107- В случае успеха возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference) на значение переменной.108- Возбуждает [`NameError`](https://python-all.ru/3/library/exceptions.html#NameError) и возвращает `NULL`, если переменная не существует.109- При ошибке возбуждает исключение и возвращает `NULL`.110111Тип *имени* должен быть [`str`](https://python-all.ru/3/library/stdtypes.html#str).112113Добавлено в версии 3.12.114115#### `PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)`116117*Возвращаемое значение: новая ссылка.*118119Аналогично [`PyFrame_GetVar()`](https://python-all.ru/3/c-api/frame.html#c.PyFrame_GetVar), но имя переменной – это C-строка в кодировке UTF-8.120121Добавлено в версии 3.12.122123#### `PyObject *PyFrame_GetLocals(PyFrameObject *frame)`124125*Возвращаемое значение: новая ссылка.*126127Получить атрибут [`f_locals`](https://python-all.ru/3/reference/datamodel.html#frame.f_locals) *фрейма*. Если фрейм ссылается на [оптимизированную область видимости](https://python-all.ru/3/glossary.html#term-optimized-scope), возвращается прокси-объект со сквозной записью, позволяющий изменять локальные переменные. Во всех остальных случаях (классы, модули, [`exec()`](https://python-all.ru/3/library/functions.html#exec), [`eval()`](https://python-all.ru/3/library/functions.html#eval)) возвращается отображение, напрямую представляющее локальные переменные фрейма (как описано в [`locals()`](https://python-all.ru/3/library/functions.html#locals)).128129Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference).130131Добавлено в версии 3.12.132133Изменено в версии 3.13: В рамках [**PEP 667**](https://python-all.ru/3/c-api/frame.html) возвращается экземпляр [`PyFrameLocalsProxy_Type`](https://python-all.ru/3/c-api/frame.html#c.PyFrameLocalsProxy_Type).134135#### `int PyFrame_GetLineNumber(PyFrameObject *frame)`136137*Часть [Stable ABI](https://python-all.ru/3/c-api/stable.html#stable) начиная с версии 3.10.*138139Возвращает номер строки, которую *фрейм* в данный момент выполняет.140141## Прокси локальных переменных фрейма142143Добавлено в версии 3.13.144145Атрибут [`f_locals`](https://python-all.ru/3/reference/datamodel.html#frame.f_locals) [объекта фрейма](https://python-all.ru/3/reference/datamodel.html#frame-objects) является экземпляром «прокси локальных переменных фрейма». Этот прокси-объект предоставляет сквозное представление нижележащего словаря локальных переменных для данного фрейма. Это гарантирует, что переменные, возвращаемые `f_locals`, всегда актуальны в соответствии с текущими локальными переменными самого фрейма.146147См. [**PEP 667**](https://python-all.ru/3/c-api/frame.html) для получения дополнительной информации.148149#### `PyTypeObject PyFrameLocalsProxy_Type`150151Тип [`locals()`](https://python-all.ru/3/library/functions.html#locals) прокси-объектов фрейма.152153#### `int PyFrameLocalsProxy_Check(PyObject *obj)`154155Возвращает ненулевое значение, если *obj* является [`locals()`](https://python-all.ru/3/library/functions.html#locals) прокси фрейма.156157## Устаревшие API для локальных переменных158159Эти API [мягко устарели](https://python-all.ru/3/glossary.html#term-soft-deprecated). Начиная с Python 3.13, они ничего не делают. Они существуют только для обратной совместимости.160161#### `void PyFrame_LocalsToFast(PyFrameObject *f, int clear)`162163До Python 3.13 эта функция копировала атрибут [`f_locals`](https://python-all.ru/3/reference/datamodel.html#frame.f_locals) *f* во внутренний «быстрый» массив локальных переменных, позволяя изменениям в объектах фрейма становиться видимыми для интерпретатора. Если *clear* был истинным, эта функция обрабатывала переменные, которые были удалены из словаря локальных переменных.164165[Мягко устарело](https://python-all.ru/3/glossary.html#term-soft-deprecated) начиная с версии 3.13: Теперь эта функция ничего не делает.166167#### `void PyFrame_FastToLocals(PyFrameObject *f)`168169До Python 3.13 эта функция копировала внутренний «быстрый» массив локальных переменных (используемый интерпретатором) в атрибут [`f_locals`](https://python-all.ru/3/reference/datamodel.html#frame.f_locals) объекта *f*, позволяя изменениям локальных переменных быть видимыми для объектов фреймов.170171[Мягко устарело](https://python-all.ru/3/glossary.html#term-soft-deprecated) начиная с версии 3.13: Теперь эта функция ничего не делает.172173#### `int PyFrame_FastToLocalsWithError(PyFrameObject *f)`174175До Python 3.13 эта функция была аналогична [`PyFrame_FastToLocals()`](https://python-all.ru/3/c-api/frame.html#c.PyFrame_FastToLocals), но возвращала `0` при успехе и `-1` с установленным исключением при ошибке.176177[Мягко устарело](https://python-all.ru/3/glossary.html#term-soft-deprecated) начиная с версии 3.13: Теперь эта функция ничего не делает.178179> **См. также**180>181> [**PEP 667**](https://python-all.ru/3/c-api/frame.html)182183## Внутренние фреймы184185Если не используется [**PEP 523**](https://python-all.ru/3/c-api/frame.html), это не понадобится.186187#### `struct _PyInterpreterFrame`188189Внутреннее представление фрейма интерпретатора.190191Добавлено в версии 3.12.192193#### `PyObject *PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);`194195> *Это [нестабильное API](https://python-all.ru/3/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*196197> Возвращает [сильную ссылку](https://python-all.ru/3/glossary.html#term-strong-reference) на объект кода для фрейма.198199Добавлено в версии 3.12.200201#### `int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);`202203> *Это [нестабильное API](https://python-all.ru/3/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*204205Возвращает смещение в байтах последней выполненной инструкции.206207Добавлено в версии 3.12.208209#### `int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);`210211> *Это [нестабильное API](https://python-all.ru/3/c-api/stable.html#unstable-c-api). Оно может меняться без предупреждения в минорных версиях.*212213Возвращает номер текущей выполняемой строки или -1, если номер строки отсутствует.214215Добавлено в версии 3.12.216