Andrey Andrey - 1 year ago 93
Python Question

Python's eval() and globals()

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):


import test

global test_variable
test_variable = 'test_value'
g = globals()
g['test_variable'] = 'test_value'
eval('test.my_func()', g)


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
? Assuming I can't pass it as a parameter.

Answer Source

*test_variable* should be global in You're getting a name error because you're trying to declare a variable global that doesn't yet exist.

So your file should be like this:

test_variable = None

def my_func():
    print test_variable

And running this from the command prompt:

>>> import my_test
>>> eval('my_test.my_func()')
>>> my_test.test_variable = 'hello'
>>> my_test.test_variable
>>> eval('my_test.my_func()')

Generally it's bad form to use eval() and globals, so make sure you know what your doing.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download