通过用户输入使用exec()/ compile()

时间:2018-10-02 01:43:10

标签: python function input

如果我要使用compile()exec()来执行用户输入的某些代码,那么可以在外部再次使用代码中定义的函数或变量吗?
例如:

code = ""
while 1:
    line = input("")
    if line == "":
        break
    code += line

exec(compile(code, "code", "exec"))
print(test()+1)

这不会像我期望的那样返回6。它给出了NameError,但是编译或执行代码没有问题。如果代码只是一个字符串而不是输入,则没有错误。有什么方法可以使用功能test()

1 个答案:

答案 0 :(得分:0)

变量名的解析和作用域在编译时完成,因此,如果在运行时使用exec定义了变量/函数名,则需要使用locals()字典来引用它:

exec(compile(code, "code", "exec"))
print(locals()['test']()+1)