如果我要使用compile()
和exec()
来执行用户输入的某些代码,那么可以在外部再次使用代码中定义的函数或变量吗?
例如:
code = ""
while 1:
line = input("")
if line == "":
break
code += line
exec(compile(code, "code", "exec"))
print(test()+1)
这不会像我期望的那样返回6
。它给出了NameError
,但是编译或执行代码没有问题。如果代码只是一个字符串而不是输入,则没有错误。有什么方法可以使用功能test()
?
答案 0 :(得分:0)
变量名的解析和作用域在编译时完成,因此,如果在运行时使用exec
定义了变量/函数名,则需要使用locals()
字典来引用它:
exec(compile(code, "code", "exec"))
print(locals()['test']()+1)