在另一个函数中执行一个函数

execute a function inside another function

我有这个配置文件 (test_conf.txt):

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

这段代码可以正常工作

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

然而,当我把它放在另一个函数中时:

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

我有这个错误:

NameError: name foo is not defined

使用 dir() 函数 foo 在命名空间中,但不知何故无法识别

从问题右侧的相关问题中确定here我可以用

解决问题
locals()['foo'](f)

让我在没有任何配置解析器的情况下重现您的问题。

公共部分

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

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

工作

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

不工作

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

run()
NameError: name foo is not defined

我通过 exec(e1,globals()) 获得了相同的输出。 ref

否认

我不确定它是如何工作的,但它确实可以解决您当前的问题。