Why is Python eval not working inside a function? The same eval(compile(cmd)) code works in the global environment, but does not work inside the foo function.
A simple example:
fn = '/tmp/tmp' mode = 'single' def foo(cmd, fn, mode): eval(compile(cmd, fn, mode)) # <<< this does not work print 'foo: cmd=', cmd print 'foo: x=', x cmd = "x = 1" eval(compile(cmd, fn, mode)) # <<< this works print 'global scope: cmd=', cmd print 'global scope: x=', x del(x) foo('x = 9', fn, mode)
This message and error message:
global scope: cmd= x = 1 global scope: x= 1 foo: cmd= x = 9 foo: x= Traceback (most recent call last): File "ctest.py", line 20, in <module> foo('x = 9', fn, mode) File "ctest.py", line 12, in foo print 'foo: x=', x NameError: global name 'x' is not defined
function python eval global-variables exec
ryszard
source share