帧对象

type PyFrameObject
受限 API 的一部分(作为不透明结构体)。

用于描述帧对象的C结构体。

此结构体中没有公共成员。

版本 3.11 中已变更: 此结构体的成员已从公共 C API 中移除。有关详细信息,请参阅新增功能条目

PyEval_GetFrame()PyThreadState_GetFrame() 函数可用于获取帧对象。

另请参阅 反射

PyTypeObject PyFrame_Type

帧对象的类型。它与 Python 层中的 types.FrameType 对象相同。

版本 3.11 中已变更: 此前,此类型仅在包含 <frameobject.h> 后才可用。

int PyFrame_Check(PyObject *obj)

如果 obj 是帧对象,则返回非零值。

版本 3.11 中已变更: 此前,此函数仅在包含 <frameobject.h> 后才可用。

PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)
返回值:新引用。

获取 frame 的下一个外部帧。

返回一个强引用,如果 frame 没有外部帧,则返回 NULL

在 3.9 版本中新增。

PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)
返回值:新引用。

获取 framef_builtins 属性。

返回一个强引用。结果不能为 NULL

在 3.11 版本中新增。

PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)
返回值:新引用。 自 3.10 版本起成为 稳定 ABI 的一部分。

获取 frame 的代码。

返回一个强引用

结果(帧代码)不能为 NULL

在 3.9 版本中新增。

PyObject *PyFrame_GetGenerator(PyFrameObject *frame)
返回值:新引用。

获取拥有此帧的生成器、协程或异步生成器,如果此帧不属于生成器,则返回 NULL。即使返回值为 NULL,也不会引发异常。

返回一个强引用,或者 NULL

在 3.11 版本中新增。

PyObject *PyFrame_GetGlobals(PyFrameObject *frame)
返回值:新引用。

获取 framef_globals 属性。

返回一个强引用。结果不能为 NULL

在 3.11 版本中新增。

int PyFrame_GetLasti(PyFrameObject *frame)

获取 framef_lasti 属性。

如果 frame.f_lastiNone,则返回 -1。

在 3.11 版本中新增。

PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)
返回值:新引用。

获取 frame 的变量 name

  • 成功时返回变量值的强引用

  • 如果变量不存在,则引发 NameError 并返回 NULL

  • 出错时引发异常并返回 NULL

name 类型必须是 str

3.12 新版功能.

PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)
返回值:新引用。

类似于 PyFrame_GetVar(),但变量名是 UTF-8 编码的 C 字符串。

3.12 新版功能.

PyObject *PyFrame_GetLocals(PyFrameObject *frame)
返回值:新引用。

获取 framef_locals 属性。如果帧引用了一个优化作用域,则此函数返回一个直写代理对象,允许修改局部变量。在所有其他情况下(类、模块、exec()eval()),它直接返回表示帧局部变量的映射(如 locals() 所述)。

返回一个强引用

在 3.11 版本中新增。

版本 3.13 中已变更: 作为 PEP 667 的一部分,返回 PyFrameLocalsProxy_Type 的一个实例。

int PyFrame_GetLineNumber(PyFrameObject *frame)
自 3.10 版本以来,作为 稳定 ABI 的一部分。

返回 frame 当前正在执行的行号。

帧局部变量代理

在 3.13 版本加入。

帧对象上的 f_locals 属性是“帧局部变量代理”的一个实例。代理对象公开了底层帧的局部变量字典的直写视图。这确保了 f_locals 公开的变量始终与帧中实时局部变量保持同步。

有关更多信息,请参阅 PEP 667

PyTypeObject PyFrameLocalsProxy_Type

locals() 代理对象的类型。

int PyFrameLocalsProxy_Check(PyObject *obj)

如果 obj 是帧 locals() 代理,则返回非零值。

内部帧

除非使用 PEP 523,否则您不需要此功能。

struct _PyInterpreterFrame

解释器的内部帧表示。

在 3.11 版本中新增。

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 新版功能.