Home > Software engineering >  execute a function inside another function
execute a function inside another function

Time:03-17

I have this configuration file (test_conf.txt):

[function]
exptime1 = |def foo(f):
           |    result=float(f['a'])
           |    return result

and this code that works without problem

c = configparser.ConfigParser()
c.read('test_conf.txt')
e1 = compile(c['function']['exptime1'].replace('|', ''), '', 'exec')
exec(e1)
f = {'a':2, 'b':'3'}
print(foo(f))

nevertheless, when I put this inside another function:

def run():
    c = configparser.ConfigParser()
    c.read('test_conf.txt')
    e1 = compile(c['function']['exptime1'].replace('|', ''), '', 'exec')
    f = {'a':2, 'b':'3'}
    exec(e1)
    print(foo(f))

I have this error:

NameError: name foo is not defined

using dir() the function foo is in the NameSpace but somehow it is not recognized

CodePudding user response:

Let me reproduce your problem without any config parser.

common section

e1 = '''def foo(f):
    result = float(f['a'])
    return result
'''

f = {'a': 2, 'b': '3'}

working

exec(e1)
print(foo(f))
#outputs 2.0

not working

def run():
    exec(e1)
    print(foo(f))

run()
NameError: name foo is not defined

I got same output by exec(e1,globals()). ref

disclamation

I'm not sure how it works, but it does work for your current problem.

CodePudding user response:

ok from a related question on the right of the question here I could solve the problem with

locals()['foo'](f)
  • Related