# Frame 物件

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

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

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

  在 3.11 版的變更: The members of this structure were removed from the public C API. Refer to the What's New entry for details.

The `PyEval_GetFrame()` and `PyThreadState_GetFrame()` functions can be used to get a frame object.

另請參閱 Reflection。

PyTypeObject PyFrame_Type

  The type of frame objects. It is the same object as `types.FrameType` in the Python layer.

  在 3.11 版的變更: Previously, this type was only available after including `<frameobject.h>`.

int PyFrame_Check(PyObject *obj)

  Return non-zero if obj is a frame object.

  在 3.11 版的變更: Previously, this function was only available after including `<frameobject.h>`.

PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)
  回傳值：新的參照。

  Get the frame next outer frame.

  Return a strong reference, or `NULL` if frame has no outer frame.

  在 3.9 版被加入.

PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)
  回傳值：新的參照。

  取得 frame 的 `f_builtins` 屬性。

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

  在 3.11 版被加入.

PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)
  回傳值：新的參照。 為 穩定 ABI 的一部分 自 3.10 版本開始.

  Get the frame code.

  回傳 strong reference。

  The result (frame code) cannot be `NULL`.

  在 3.9 版被加入.

PyObject *PyFrame_GetGenerator(PyFrameObject *frame)
  回傳值：新的參照。

  Get the generator, coroutine, or async generator that owns this frame, or `NULL` if this frame is not owned by a generator. Does not raise an exception, even if the return value is `NULL`.

  回傳 strong reference 或 `NULL`。

  在 3.11 版被加入.

PyObject *PyFrame_GetGlobals(PyFrameObject *frame)
  回傳值：新的參照。

  取得 frame 的 `f_globals` 屬性。

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

  在 3.11 版被加入.

int PyFrame_GetLasti(PyFrameObject *frame)

  取得 frame 的 `f_lasti` 屬性。

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

  在 3.11 版被加入.

PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)
  回傳值：新的參照。

  取得 frame 的變數 name。

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

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

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

  name 的型別必須是 `str`。

  在 3.12 版被加入.

PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)
  回傳值：新的參照。

  Similar to `PyFrame_GetVar()`, but the variable name is a C string encoded in UTF-8.

  在 3.12 版被加入.

PyObject *PyFrame_GetLocals(PyFrameObject *frame)
  回傳值：新的參照。

  Get the frame's `f_locals` attribute. If the frame refers to an optimized scope, this returns a write-through proxy object that allows modifying the locals. In all other cases (classes, modules, `exec()`, `eval()`) it returns the mapping representing the frame locals directly (as described for `locals()`).

  回傳 strong reference。

  在 3.11 版被加入.

  在 3.13 版的變更: As part of PEP 667, return an instance of `PyFrameLocalsProxy_Type`.

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

  Return the line number that frame is currently executing.

## Frame Locals Proxies

在 3.13 版被加入.

The `f_locals` attribute on a frame object is an instance of a "frame-locals proxy". The proxy object exposes a write-through view of the underlying locals dictionary for the frame. This ensures that the variables exposed by `f_locals` are always up to date with the live local variables in the frame itself.

See PEP 667 for more information.

PyTypeObject PyFrameLocalsProxy_Type

  The type of frame `locals()` proxy objects.

int PyFrameLocalsProxy_Check(PyObject *obj)

  Return non-zero if obj is a frame `locals()` proxy.

## Internal Frames

Unless using PEP 523, you will not need this.

struct _PyInterpreterFrame

  The interpreter's internal frame representation.

  在 3.11 版被加入.

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

  > Return a strong reference to the code object for the frame.

  在 3.12 版被加入.

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

  Return the byte offset into the last executed instruction.

  在 3.12 版被加入.

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

  Return the currently executing line number, or -1 if there is no line number.

  在 3.12 版被加入.