I actually want to create a new local. I know it sounds dubious, but I think I have a nice use case for this. Essentially my problem is that this code throws "NameError: global name 'eggs' is not defined" when I try to print eggs:
def f():
import inspect
frame_who_called = inspect.stack()[1][0]
frame_who_called.f_locals['eggs'] = 123
def g():
f()
print(eggs)
g()
I found this old thing: http://mail.python.org/pipermail/python-dev/2005-January/051018.html
Which would mean I might be able to do it using ctypes and calling some secret function, though they only talked about updating a value. But maybe there's an easier way?
As Greg Hewgill mentioned in a comment on the question, I answered another question about modifying locals
in Python 3, and I'll give a bit of a recap here.
There is a post on the Python 3 bug list about this issue -- it's somewhat poorly documented in the Python 3 manuals. Python 3 uses an array for locals instead of a dictionary like in Python 2 -- the advantage is a faster lookup time for local variables (Lua does this too). Basically, the array is defined at "bytecode-compile-time" and cannot be modified at runtime.
See specifically the last paragraph in Georg Brandl's post on the bug list for finer details about why this cannot (and probably never will) work in Python 3.