STINNER Victor <vstin...@python.org> added the comment:
Example of C code that I added to _testcapi: --- static PyObject * get_caller_locals(PyObject *self, PyObject *Py_UNUSED(args)) { PyFrameObject *frame = PyThreadState_GetFrame(PyThreadState_Get()); if (frame == NULL) { Py_RETURN_NONE; } return PyObject_GetAttrString(frame, "f_locals"); } --- Python example: --- import _testcapi def f(): x = 1 y = 2 print(_testcapi.get_caller_locals()) f() --- Output on Python 3.11: --- {'x': 1, 'y': 2} --- => it just works. A PyFrameObject is a regular Python object, you can use functions like PyObject_GetAttrString(). Maybe I missed something, correct me if I'm wrong. ---------- _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46166> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com