2022-03-23 09:19:13 -03:00
|
|
|
.. highlight:: c
|
|
|
|
|
|
|
|
Frame Objects
|
|
|
|
-------------
|
|
|
|
|
|
|
|
.. c:type:: PyFrameObject
|
|
|
|
|
|
|
|
The C structure of the objects used to describe frame objects.
|
|
|
|
|
2022-04-06 11:50:45 -03:00
|
|
|
There are no public members in this structure.
|
2022-03-23 09:19:13 -03:00
|
|
|
|
|
|
|
.. versionchanged:: 3.11
|
2022-04-06 11:50:45 -03:00
|
|
|
The members of this structure were removed from the public C API.
|
|
|
|
Refer to the :ref:`What's New entry <pyframeobject-3.11-hiding>`
|
|
|
|
for details.
|
2022-03-23 09:19:13 -03:00
|
|
|
|
|
|
|
The :c:func:`PyEval_GetFrame` and :c:func:`PyThreadState_GetFrame` functions
|
|
|
|
can be used to get a frame object.
|
|
|
|
|
|
|
|
See also :ref:`Reflection <reflection>`.
|
|
|
|
|
2022-11-22 11:41:57 -04:00
|
|
|
.. c:var:: PyTypeObject PyFrame_Type
|
|
|
|
|
|
|
|
The type of frame objects.
|
|
|
|
It is the same object as :py:class:`types.FrameType` in the Python layer.
|
|
|
|
|
|
|
|
.. versionchanged:: 3.11
|
|
|
|
|
|
|
|
Previously, this type was only available after including
|
|
|
|
``<frameobject.h>``.
|
|
|
|
|
|
|
|
.. c:function:: int PyFrame_Check(PyObject *obj)
|
|
|
|
|
|
|
|
Return non-zero if *obj* is a frame object.
|
|
|
|
|
|
|
|
.. versionchanged:: 3.11
|
|
|
|
|
|
|
|
Previously, this function was only available after including
|
|
|
|
``<frameobject.h>``.
|
2022-03-23 09:19:13 -03:00
|
|
|
|
|
|
|
.. c:function:: PyFrameObject* PyFrame_GetBack(PyFrameObject *frame)
|
|
|
|
|
|
|
|
Get the *frame* next outer frame.
|
|
|
|
|
|
|
|
Return a :term:`strong reference`, or ``NULL`` if *frame* has no outer
|
|
|
|
frame.
|
|
|
|
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
|
|
|
|
|
2022-03-31 13:13:25 -03:00
|
|
|
.. c:function:: PyObject* PyFrame_GetBuiltins(PyFrameObject *frame)
|
|
|
|
|
2023-12-05 15:27:59 -04:00
|
|
|
Get the *frame*'s :attr:`~frame.f_builtins` attribute.
|
2022-03-31 13:13:25 -03:00
|
|
|
|
|
|
|
Return a :term:`strong reference`. The result cannot be ``NULL``.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
|
|
|
|
2022-03-23 09:19:13 -03:00
|
|
|
.. c:function:: PyCodeObject* PyFrame_GetCode(PyFrameObject *frame)
|
|
|
|
|
|
|
|
Get the *frame* code.
|
|
|
|
|
|
|
|
Return a :term:`strong reference`.
|
|
|
|
|
2022-04-19 04:53:10 -03:00
|
|
|
The result (frame code) cannot be ``NULL``.
|
2022-03-23 09:19:13 -03:00
|
|
|
|
|
|
|
.. versionadded:: 3.9
|
|
|
|
|
|
|
|
|
2022-03-31 13:13:25 -03:00
|
|
|
.. c:function:: 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``.
|
|
|
|
|
|
|
|
Return a :term:`strong reference`, or ``NULL``.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: PyObject* PyFrame_GetGlobals(PyFrameObject *frame)
|
|
|
|
|
2023-12-05 15:27:59 -04:00
|
|
|
Get the *frame*'s :attr:`~frame.f_globals` attribute.
|
2022-03-31 13:13:25 -03:00
|
|
|
|
|
|
|
Return a :term:`strong reference`. The result cannot be ``NULL``.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
|
|
|
|
2022-04-08 08:18:57 -03:00
|
|
|
.. c:function:: int PyFrame_GetLasti(PyFrameObject *frame)
|
|
|
|
|
2023-12-05 15:27:59 -04:00
|
|
|
Get the *frame*'s :attr:`~frame.f_lasti` attribute.
|
2022-04-08 08:18:57 -03:00
|
|
|
|
|
|
|
Returns -1 if ``frame.f_lasti`` is ``None``.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
|
|
|
|
2022-11-08 12:40:27 -04:00
|
|
|
.. c:function:: PyObject* PyFrame_GetVar(PyFrameObject *frame, PyObject *name)
|
|
|
|
|
|
|
|
Get the variable *name* of *frame*.
|
|
|
|
|
|
|
|
* Return a :term:`strong reference` to the variable value on success.
|
|
|
|
* Raise :exc:`NameError` and return ``NULL`` if the variable does not exist.
|
|
|
|
* Raise an exception and return ``NULL`` on error.
|
|
|
|
|
2022-11-13 10:37:03 -04:00
|
|
|
*name* type must be a :class:`str`.
|
|
|
|
|
2022-11-08 12:40:27 -04:00
|
|
|
.. versionadded:: 3.12
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: PyObject* PyFrame_GetVarString(PyFrameObject *frame, const char *name)
|
|
|
|
|
|
|
|
Similar to :c:func:`PyFrame_GetVar`, but the variable name is a C string
|
|
|
|
encoded in UTF-8.
|
|
|
|
|
|
|
|
.. versionadded:: 3.12
|
|
|
|
|
|
|
|
|
2022-03-25 09:57:50 -03:00
|
|
|
.. c:function:: PyObject* PyFrame_GetLocals(PyFrameObject *frame)
|
|
|
|
|
2024-05-05 12:31:26 -03:00
|
|
|
Get the *frame*'s :attr:`~frame.f_locals` attribute.
|
|
|
|
If the frame refers to a function or comprehension, this returns
|
|
|
|
a write-through proxy object that allows modifying the locals.
|
|
|
|
In all other cases (classes, modules) it returns the :class:`dict`
|
|
|
|
representing the frame locals directly.
|
2022-03-25 09:57:50 -03:00
|
|
|
|
|
|
|
Return a :term:`strong reference`.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
2024-05-05 12:31:26 -03:00
|
|
|
.. versionchanged:: 3.13
|
|
|
|
Return a proxy object for functions and comprehensions.
|
|
|
|
|
2022-03-25 09:57:50 -03:00
|
|
|
|
2022-03-23 09:19:13 -03:00
|
|
|
.. c:function:: int PyFrame_GetLineNumber(PyFrameObject *frame)
|
|
|
|
|
|
|
|
Return the line number that *frame* is currently executing.
|
2023-05-18 06:10:15 -03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Internal Frames
|
2023-06-14 11:21:30 -03:00
|
|
|
^^^^^^^^^^^^^^^
|
2023-05-18 06:10:15 -03:00
|
|
|
|
|
|
|
Unless using :pep:`523`, you will not need this.
|
|
|
|
|
|
|
|
.. c:struct:: _PyInterpreterFrame
|
|
|
|
|
|
|
|
The interpreter's internal frame representation.
|
|
|
|
|
|
|
|
.. versionadded:: 3.11
|
|
|
|
|
|
|
|
.. c:function:: PyObject* PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
|
|
|
|
|
|
|
|
Return a :term:`strong reference` to the code object for the frame.
|
|
|
|
|
|
|
|
.. versionadded:: 3.12
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
|
|
|
|
|
|
|
|
Return the byte offset into the last executed instruction.
|
|
|
|
|
|
|
|
.. versionadded:: 3.12
|
|
|
|
|
|
|
|
|
|
|
|
.. c:function:: int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
|
|
|
|
|
|
|
|
Return the currently executing line number, or -1 if there is no line number.
|
|
|
|
|
|
|
|
.. versionadded:: 3.12
|
|
|
|
|
|
|
|
|