[Python-Dev] Inconsistent nesting of scopes in exec(..., locals()) (original) (raw)
Joachim B Haga jobh at broadpark.no
Fri Apr 23 15:41:55 CEST 2010
- Previous message: [Python-Dev] code.python.org - random 403 errors
- Next message: [Python-Dev] Inconsistent nesting of scopes in exec(..., locals())
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
There seem to be an inconsistency in the handling of local scopes in exec. Consider the following code, which raises NameError if the '#' is removed from the second last line.
block = """ b = 'ok' def f(): print(b) # raises NameError here f() """ scope = locals()#.copy() exec(block, globals(), scope)
The intermediate scope is searched for the variable name if the third argument to exec() is locals(), but not if it is locals().copy(). Testing further, it looks like NameError is raised for any dict which is not identically equal to either globals() or locals().
This behaviour is quite unexpected, and I believe it qualifies as a bug. Tested with python 2.6.5 and 3.1.2.
-- Joachim B Haga
- Previous message: [Python-Dev] code.python.org - random 403 errors
- Next message: [Python-Dev] Inconsistent nesting of scopes in exec(..., locals())
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]