Cannot change global variables in a function through an exec() statement?

Per the docs, the exec statement takes two optional expressions, defaulting to globals() and locals(), and always performs changes (if any) in the locals() one.

So, just be more explicit/specific/precise…:

>>> def myfunc():
...   exec('myvar="boooh!"', globals())
... 
>>> myfunc()
>>> myvar
'boooh!'

…and you’ll be able to clobber global variables to your heart’s contents.

Leave a Comment