I’m trying to execute a number of functions using eval(), and I need to create some kind of environment for them to run. It is said in documentation that you can pass globals as a second parameter to eval().
But it seems to not work in my case. Here’s the simpified example (I tried two approaches, declaring variable global and using globals(), and both do not work):
File script.py:
import test global test_variable test_variable = 'test_value' g = globals() g['test_variable'] = 'test_value' eval('test.my_func()', g)
File test.py:
def my_func(): global test_variable print repr(test_variable)
And I’m getting:
NameError: global name ‘test_variable’ is not defined.
What should I do to pass that test_variable into my_func()? Assuming I can’t pass it as a parameter.
test_variable should be global in test.py. You’re getting a name error because you’re trying to declare a variable global that doesn’t yet exist.
So your my_test.py file should be like this:
And running this from the command prompt:
Generally it’s bad form to use eval() and globals, so make sure you know what your doing.