Содержание страницы
Объекты фреймов¶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()прокси-объектов фрейма.
Устаревшие API для локальных переменных¶Legacy local variable APIs
Эти API мягко устарели. Начиная с Python 3.13, они ничего не делают. Они существуют только для обратной совместимости.
-
void PyFrame_LocalsToFast(PyFrameObject *f, int clear)¶
До Python 3.13 эта функция копировала атрибут
f_localsf во внутренний «быстрый» массив локальных переменных, позволяя изменениям в объектах фрейма становиться видимыми для интерпретатора. Если 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: Теперь эта функция ничего не делает.
См. также
Внутренние фреймы¶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.