在另一个函数中执行一个函数
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
否认
我不确定它是如何工作的,但它确实可以解决您当前的问题。
我有这个配置文件 (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
否认
我不确定它是如何工作的,但它确实可以解决您当前的问题。