幀物件

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