Why can I not change global variables from inside a function, using exec()? It works fine when the assignment statement is outside of exec(). Here is an example of my problem:
>>> myvar = 'test' >>> def myfunc(): ... global myvar ... exec('myvar = "changed!"') ... print(myvar) ... >>> myfunc() test >>> print(myvar) test
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With