# Frame 物件

type PyFrameObject
  為 受限 API 的一部分 （做為一個不透明結構 (opaque struct)）.

  用來描述 frame 物件的 C 結構。

  在這個結構中沒有公開的成員。

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

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

可参考：Reflection 1

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 为下一个外部帧。

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

  Added in version 3.9.

PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)

  取得 frame 的 `f_builtins` 屬性。

  回傳 strong reference。結果不能為 `NULL`。

  Added in version 3.11.

PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)
  為 穩定 ABI 的一部分 自 3.10 版本開始.

  获取 frame 的代码。

  回傳 strong reference。

  结果（帧代码）不可为 `NULL`。

  Added in version 3.9.

PyObject *PyFrame_GetGenerator(PyFrameObject *frame)

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

  回傳 strong reference 或 `NULL`。

  Added in version 3.11.

PyObject *PyFrame_GetGlobals(PyFrameObject *frame)

  取得 frame 的 `f_globals` 屬性。

  回傳 strong reference。結果不能為 `NULL`。

  Added in version 3.11.

int PyFrame_GetLasti(PyFrameObject *frame)

  取得 frame 的 `f_lasti` 屬性。

  如果 `frame.f_lasti` 是 `None` 則回傳 -1。

  Added in version 3.11.

PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)

  取得 frame 的變數 name。

  - 在成功時回傳變數值的 strong reference。

  - 如果變數不存在，則引發 `NameError` 並回傳 `NULL`。

  - 在錯誤時引發例外並回傳 `NULL`。

  name 的型別必須是 `str`。

  Added in version 3.12.

PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)

  和 `PyFrame_GetVar()` 相似，但该变量名是一个使用 UTF-8 编码的 C 字符串。

  Added in version 3.12.

PyObject *PyFrame_GetLocals(PyFrameObject *frame)

  获取 frame 的 `f_locals` 属性 (`dict`)。

  回傳 strong reference。

  Added in version 3.11.

int PyFrame_GetLineNumber(PyFrameObject *frame)
  為 穩定 ABI 的一部分 自 3.10 版本開始.

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

## 内部帧

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

struct _PyInterpreterFrame

  解释器的内部帧表示。

  Added in version 3.11.

PyObject *PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
  這是 不穩定 API，它可能在小版本發布中沒有任何警告地被變更。

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

  Added in version 3.12.

int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
  這是 不穩定 API，它可能在小版本發布中沒有任何警告地被變更。

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

  Added in version 3.12.

int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
  這是 不穩定 API，它可能在小版本發布中沒有任何警告地被變更。

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

  Added in version 3.12.