帧对象

  • type PyFrameObject
  • 属于 受限 API (作为不透明的结构体). 用于描述帧对象的对象C结构体。

此结构体中无公有成员。

在 3.11 版本发生变更: 此结构体的成员已从公有 C API 中移除。 请参阅 What's New entry 了解详情。

可以使用函数 PyEval_GetFrame()PyThreadState_GetFrame() 去获取一个帧对象。

可参考:Reflection 1

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

在 3.11 版本发生变更: 在之前版本中,此类型仅在包括 之后可用。

  • 如果 obj 是一个帧对象则返回非零值。

在 3.11 版本发生变更: 在之前版本中,只函数仅在包括 之后可用。

  • 返回值:新的引用。 获取 frame 为下一个外部帧。

返回一个 strong reference,或者如果 frame 没有外部帧则返回 NULL

Added in version 3.9.

  • 返回值:新的引用。 获取 frame 的 f_builtins 属性。

返回一个 strong reference。 此结果不可为 NULL

Added in version 3.11.

  • 返回值:新的引用。 属于 稳定 ABI 自 3.10 版起. 获取 frame 的代码。

返回一个 strong reference

结果(帧代码)不可为 NULL

Added in version 3.9.

  • 返回值:新的引用。 获取拥有该帧的生成器、协程或异步生成器,或者如果该帧不被某个生成器所拥有则为 NULL。 不会引发异常,即使其返回值为 NULL

返回一个 strong reference,或者 NULL

Added in version 3.11.

  • 返回值:新的引用。 获取 frame 的 f_globals 属性。

返回一个 strong reference。 此结果不可为 NULL

Added in version 3.11.

  • 获取 frame 的 f_lasti 属性。

如果 frame.f_lastiNone 则返回 -1。

Added in version 3.11.

  • 返回值:新的引用。 获取 frame 的变量 name。

    • 成功时返回一个指向变量值的 strong reference

    • 引发 NameError 并返回 NULL 如果该变量不存在。

    • 引发异常并返回NULL错误。

name 必须是 str 类型的。

Added in version 3.12.

  • 返回值:新的引用。 和 PyFrame_GetVar() 相似,但该变量名是一个使用 UTF-8 编码的 C 字符串。

Added in version 3.12.

  • 返回值:新的引用。 获取 frame 的 f_locals 属性。 如果该帧指向一个 optimized scope,这将返回一个允许修改 locals 的直通写入代理对象。 在所有其他情况下 (类、模块、exec()eval()) 它将直接返回代表该帧的 locals 的映射 (如为 locals() 所描述的)。

返回一个 strong reference

Added in version 3.11.

在 3.13 版本发生变更: 作为 PEP 667 [https://peps.python.org/pep-0667/] 的组成部分,返回一个 PyFrameLocalsProxy_Type 的实例。

  • 属于 稳定 ABI 自 3.10 版起. 返回 frame 当前正在执行的行号。

帧 locals 代理

Added in version 3.13.

帧对象f_locals 属性是“帧 locals 代理”的一个实例。 该代理对象将对外公开一个下层帧 locals 字典的直写视图。 这确保了由 f_locals 暴露的变量总是与帧本身的现有局部变量内容一致。

请参阅 PEP 667 [https://peps.python.org/pep-0667/] 了解详情。

  • int PyFrameLocalsProxy_Check(PyObject *obj)
  • 如果 obj 是一个帧 locals() 代理则返回非零值。

内部帧

除非使用:pep:523,否则你不会需要它。

  • struct _PyInterpreterFrame
  • 解释器的内部帧表示。

Added in version 3.11.

  • 这是 不稳定 API。它可在次发布版中不经警告地改变。

返回一个指向帧的代码对象的 strong reference

Added in version 3.12.

  • 这是 不稳定 API。它可在次发布版中不经警告地改变。

将字节偏移量返回到最后执行的指令中。

Added in version 3.12.

  • 这是 不稳定 API。它可在次发布版中不经警告地改变。

返回正在执行的指令的行数,如果没有行数,则返回-1。

Added in version 3.12.