假设我们有一个字符串
function_string = 'def main():\n\treturn(1)'
如何在运行时将其编译为函数然后执行?
这是我目前的尝试,不幸的是它引发了一个NameError,表示main
未定义:
self.run():
exec(self.formatted_function_string) # similar to 'function_string' in the example
print(main())
答案 0 :(得分:0)
正如我在评论中所说,执行/评估任意字符串是一种安全风险。但是如果你真的想要这样做,你需要传递exec
一个适当的全局字典。这里的自然选择是将globals()
dict传递给它,以便exec
定义的任何名称都放入全局命名空间。
def test(argstring):
exec(argstring, globals())
print(main())
function_string = 'def main():\n\treturn(1)'
test(function_string)
print(main)
典型输出
1
<function main at 0xb7196cd4>