幀物件

型別 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)
返回值:新的引用。

獲取 *frame* 的 f_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)
返回值:新的引用。

獲取 *frame* 的 f_globals 屬性。

返回一個 強引用。結果不能為 NULL

在 3.11 版本中新增。

int PyFrame_GetLasti(PyFrameObject *frame)

獲取 *frame* 的 f_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)
返回值:新的引用。

獲取 *frame* 的 f_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 屬性在 frame 物件上是一個“幀區域性變數代理”的例項。該代理物件暴露了幀底層區域性變數字典的直寫檢視。這確保了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 版本中新增。