Документация Python неофициальный перевод
Содержание страницы

Объекты фреймовFrame objects

type PyFrameObject
Часть Limited API (как непрозрачная структура).

C-структура объектов, используемая для описания объектов фреймов.

В этой структуре нет открытых членов.

Изменено в версии 3.11: Члены этой структуры были удалены из публичного C API. Подробнее см. в статью «Что нового» .

Функции PyEval_GetFrame() и PyThreadState_GetFrame() можно использовать для получения объекта фрейма.

См. также Отражение.

PyTypeObject PyFrame_Type

Тип объектов фреймов. Это тот же объект, что и types.FrameType на уровне Python.

Изменено в версии 3.11: Ранее этот тип был доступен только после включения <frameobject.h>.

PyFrameObject *PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals, PyObject *locals)

Создаёт новый объект фрейма. В случае успеха эта функция возвращает сильную ссылку на новый объект фрейма, а в случае неудачи возвращает NULL с установленным исключением.

int PyFrame_Check(PyObject *obj)

Возвращает ненулевое значение, если obj является объектом фрейма.

Изменено в версии 3.11: Ранее эта функция была доступна только после включения <frameobject.h>.

PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)
Возвращаемое значение: новая ссылка.

Получает следующий внешний фрейм frame.

Возвращает сильную ссылку или NULL, если у frame нет внешнего фрейма. Не вызывает исключений.

Добавлено в версии 3.9.

PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)
Возвращаемое значение: новая ссылка.

Получить атрибут f_builtins фрейма.

Возвращает сильную ссылку. Результат не может быть NULL.

Добавлено в версии 3.12.

PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)
Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.10.

Получает код frame.

Возвращает сильную ссылку.

Результат (код фрейма) не может быть NULL.

Добавлено в версии 3.9.

PyObject *PyFrame_GetGenerator(PyFrameObject *frame)
Возвращаемое значение: новая ссылка.

Получает генератор, корутину или асинхронный генератор, которому принадлежит этот фрейм, или NULL, если фрейм не принадлежит генератору. Не вызывает исключения, даже если возвращаемое значение равно NULL.

Возвращает сильную ссылку или NULL.

Добавлено в версии 3.12.

PyObject *PyFrame_GetGlobals(PyFrameObject *frame)
Возвращаемое значение: новая ссылка.

Получить атрибут f_globals фрейма.

Возвращает сильную ссылку. Результат не может быть NULL.

Добавлено в версии 3.12.

int PyFrame_GetLasti(PyFrameObject *frame)

Получить атрибут f_lasti фрейма.

Возвращает -1, если frame.f_lasti равно None.

Добавлено в версии 3.12.

PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)
Возвращаемое значение: новая ссылка.

Получить имя переменной из фрейма.

  • В случае успеха возвращает сильную ссылку на значение переменной.

  • Возбуждает NameError и возвращает NULL, если переменная не существует.

  • При ошибке возбуждает исключение и возвращает NULL.

Тип имени должен быть str.

Добавлено в версии 3.12.

PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)
Возвращаемое значение: новая ссылка.

Аналогично PyFrame_GetVar(), но имя переменной – это C-строка в кодировке UTF-8.

Добавлено в версии 3.12.

PyObject *PyFrame_GetLocals(PyFrameObject *frame)
Возвращаемое значение: новая ссылка.

Получить атрибут f_locals фрейма. Если фрейм ссылается на оптимизированную область видимости, возвращается прокси-объект со сквозной записью, позволяющий изменять локальные переменные. Во всех остальных случаях (классы, модули, exec(), eval()) возвращается отображение, напрямую представляющее локальные переменные фрейма (как описано в locals()).

Возвращает сильную ссылку.

Добавлено в версии 3.12.

Изменено в версии 3.13: В рамках PEP 667 возвращается экземпляр PyFrameLocalsProxy_Type.

int PyFrame_GetLineNumber(PyFrameObject *frame)
Часть Stable ABI начиная с версии 3.10.

Возвращает номер строки, которую фрейм в данный момент выполняет.

Прокси локальных переменных фреймаFrame locals proxies

Добавлено в версии 3.13.

Атрибут f_locals объекта фрейма является экземпляром «прокси локальных переменных фрейма». Этот прокси-объект предоставляет сквозное представление нижележащего словаря локальных переменных для данного фрейма. Это гарантирует, что переменные, возвращаемые f_locals, всегда актуальны в соответствии с текущими локальными переменными самого фрейма.

См. PEP 667 для получения дополнительной информации.

PyTypeObject PyFrameLocalsProxy_Type

Тип locals() прокси-объектов фрейма.

int PyFrameLocalsProxy_Check(PyObject *obj)

Возвращает ненулевое значение, если obj является locals() прокси фрейма.

Устаревшие API для локальных переменныхLegacy local variable APIs

Эти API мягко устарели. Начиная с Python 3.13, они ничего не делают. Они существуют только для обратной совместимости.

void PyFrame_LocalsToFast(PyFrameObject *f, int clear)

До Python 3.13 эта функция копировала атрибут f_locals f во внутренний «быстрый» массив локальных переменных, позволяя изменениям в объектах фрейма становиться видимыми для интерпретатора. Если clear был истинным, эта функция обрабатывала переменные, которые были удалены из словаря локальных переменных.

Мягко устарело начиная с версии 3.13: Теперь эта функция ничего не делает.

void PyFrame_FastToLocals(PyFrameObject *f)

До Python 3.13 эта функция копировала внутренний «быстрый» массив локальных переменных (используемый интерпретатором) в атрибут f_locals объекта f, позволяя изменениям локальных переменных быть видимыми для объектов фреймов.

Мягко устарело начиная с версии 3.13: Теперь эта функция ничего не делает.

int PyFrame_FastToLocalsWithError(PyFrameObject *f)

До Python 3.13 эта функция была аналогична PyFrame_FastToLocals(), но возвращала 0 при успехе и -1 с установленным исключением при ошибке.

Мягко устарело начиная с версии 3.13: Теперь эта функция ничего не делает.

См. также

PEP 667

Внутренние фреймыInternal frames

Если не используется PEP 523, это не понадобится.

struct _PyInterpreterFrame

Внутреннее представление фрейма интерпретатора.

Добавлено в версии 3.12.

PyObject *PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.

Возвращает сильную ссылку на объект кода для фрейма.

Добавлено в версии 3.12.

int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.

Возвращает смещение в байтах последней выполненной инструкции.

Добавлено в версии 3.12.

int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
Это нестабильное API. Оно может меняться без предупреждения в минорных версиях.

Возвращает номер текущей выполняемой строки или -1, если номер строки отсутствует.

Добавлено в версии 3.12.