[New-bugs-announce] [issue4831] exec() behavior - revisited
David M. Beazley
report at bugs.python.org
Sun Jan 4 15:52:37 CET 2009
New submission from David M. Beazley <beazley at users.sourceforge.net>:
Please forgive me, but I'm really trying to wrap my brain around the
behavior of exec() in Python 3. Here's a quote from the documentation:
"In all cases, if the optional parts are omitted, the code is
executed in the current scope."
This is referring to the optional use of the globals/locals parameters
and seems to indicate that if they're omitted the code executes in the
scope where the exec() appeared.
Yet, this code fails:
def foo():
exec("a = 42")
print(a) # NameError: a
Now, I realize that exec() became a function in Python 3. However,
regardless of that, is it really the intent that exec() not be allowed
to ever modify any local variable of a function? In other words, do I
really have to do this?
def foo():
ldict = locals()
exec("a=42",globals(),ldict)
a = ldict['a']
print(a)
I submitted a bug report about this once before and it was immediately
dismissed.
I would appreciate some greater clarity on this matter this go around.
Specifically, what is the approved way to have exec() modify the local
environment of a function?
----------
components: Interpreter Core
messages: 79059
nosy: beazley
severity: normal
status: open
title: exec() behavior - revisited
type: behavior
versions: Python 3.0
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue4831>
_______________________________________
More information about the New-bugs-announce
mailing list