| 
									
										
										
										
											2022-03-23 13:19:13 +01:00
										 |  |  | .. highlight:: c
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Frame Objects
 | 
					
						
							|  |  |  | -------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:type:: PyFrameObject
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The C structure of the objects used to describe frame objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-06 16:50:45 +02:00
										 |  |  |    There are no public members in this structure.
 | 
					
						
							| 
									
										
										
										
											2022-03-23 13:19:13 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.11
 | 
					
						
							| 
									
										
										
										
											2022-04-06 16:50:45 +02: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 13:19:13 +01: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 16:41:57 +01: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 13:19:13 +01: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 17:13:25 +01:00
										 |  |  | .. c:function:: PyObject* PyFrame_GetBuiltins(PyFrameObject *frame)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-05 19:27:59 +00:00
										 |  |  |    Get the *frame*'s :attr:`~frame.f_builtins` attribute.
 | 
					
						
							| 
									
										
										
										
											2022-03-31 17:13:25 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return a :term:`strong reference`. The result cannot be ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.11
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-23 13:19:13 +01:00
										 |  |  | .. c:function:: PyCodeObject* PyFrame_GetCode(PyFrameObject *frame)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Get the *frame* code.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return a :term:`strong reference`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-19 09:53:10 +02:00
										 |  |  |    The result (frame code) cannot be ``NULL``.
 | 
					
						
							| 
									
										
										
										
											2022-03-23 13:19:13 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.9
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-31 17:13:25 +01: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 19:27:59 +00:00
										 |  |  |    Get the *frame*'s :attr:`~frame.f_globals` attribute.
 | 
					
						
							| 
									
										
										
										
											2022-03-31 17:13:25 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return a :term:`strong reference`. The result cannot be ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.11
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-08 12:18:57 +01:00
										 |  |  | .. c:function:: int PyFrame_GetLasti(PyFrameObject *frame)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-05 19:27:59 +00:00
										 |  |  |    Get the *frame*'s :attr:`~frame.f_lasti` attribute.
 | 
					
						
							| 
									
										
										
										
											2022-04-08 12:18:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Returns -1 if ``frame.f_lasti`` is ``None``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.11
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-08 17:40:27 +01: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 15:37:03 +01:00
										 |  |  |    *name* type must be a :class:`str`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-08 17:40:27 +01: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 12:57:50 +00:00
										 |  |  | .. c:function:: PyObject* PyFrame_GetLocals(PyFrameObject *frame)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-05 08:31:26 -07:00
										 |  |  |    Get the *frame*'s :attr:`~frame.f_locals` attribute.
 | 
					
						
							| 
									
										
										
										
											2024-05-21 13:32:15 +10:00
										 |  |  |    If the frame refers to an :term:`optimized scope`, this returns a
 | 
					
						
							|  |  |  |    write-through proxy object that allows modifying the locals.
 | 
					
						
							|  |  |  |    In all other cases (classes, modules, :func:`exec`, :func:`eval`) it returns
 | 
					
						
							|  |  |  |    the mapping representing the frame locals directly (as described for
 | 
					
						
							|  |  |  |    :func:`locals`).
 | 
					
						
							| 
									
										
										
										
											2022-03-25 12:57:50 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    Return a :term:`strong reference`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.11
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-05 08:31:26 -07:00
										 |  |  |    .. versionchanged:: 3.13
 | 
					
						
							| 
									
										
										
										
											2024-12-11 11:28:44 -05:00
										 |  |  |       As part of :pep:`667`, return an instance of :c:var:`PyFrameLocalsProxy_Type`.
 | 
					
						
							| 
									
										
										
										
											2024-05-05 08:31:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-25 12:57:50 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-23 13:19:13 +01:00
										 |  |  | .. c:function:: int PyFrame_GetLineNumber(PyFrameObject *frame)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return the line number that *frame* is currently executing.
 | 
					
						
							| 
									
										
										
										
											2023-05-18 10:10:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-12-11 11:28:44 -05:00
										 |  |  | Frame Locals Proxies
 | 
					
						
							|  |  |  | ^^^^^^^^^^^^^^^^^^^^
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. versionadded:: 3.13
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The :attr:`~frame.f_locals` attribute on a :ref:`frame object <frame-objects>`
 | 
					
						
							|  |  |  | 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.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:var:: PyTypeObject PyFrameLocalsProxy_Type
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The type of frame :func:`locals` proxy objects.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: int PyFrameLocalsProxy_Check(PyObject *obj)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Return non-zero if *obj* is a frame :func:`locals` proxy.
 | 
					
						
							| 
									
										
										
										
											2023-05-18 10:10:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Internal Frames
 | 
					
						
							| 
									
										
										
										
											2023-06-14 19:51:30 +05:30
										 |  |  | ^^^^^^^^^^^^^^^
 | 
					
						
							| 
									
										
										
										
											2023-05-18 10:10:15 +01: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
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 |