7 ms·
I just tested it in Python3: def foo(): exec("a=1") return a print(foo()) Fails with a NameError: Traceback (most recent call la
by speedster217 8y ago
I just tested it in Python3:
def foo():
exec("a=1")
return a
print(foo())
Fails with a NameError:
Traceback (most recent call last):
File "test.py", line 5, in <module>
print(foo())
File "test.py", line 3, in foo
return a
NameError: name 'a' is not defined
- joncatanio 8y agoI get the same error with your example, but this works fine (Python 3.6.4): exec("a = 1") print(a) This will print "1".
- yorwba 8y agoThat is because the exec runs in the global scope. When Python sees a variable that is not assigned to in the local scope, it is assumed to be a global variable, so when exec creates a new local variable, the load still fails because it looks into the globals dictionary. But you can do this: def foo(): exec("a = 1") return locals()['a']