我一直在寻找的Python代码动态评估,并遇到了eval()和compile()功能,以及exec声明.
有人可以解释之间的区别eval和exec怎样的不同模式,compile()适应吗?
我试图评估以下制表符缩进的字符串:
'''for index in range(10):
os.system("echo " + str(index) + "")
'''
Run Code Online (Sandbox Code Playgroud)
我明白了,"有一个错误:语法无效,第1行"
有什么抱怨的?我是否需要缩进以匹配eval()语句,或将其写入字符串文件或临时文件并执行该操作或其他内容?
谢谢,
我有一个语法树
Tree(if, [Tree(condition, [Token(VARIABLE, 'age'), Token(ACTION_OPERATOR, '>'), Token(SIGNED_NUMBER, '18')]), Tree(result, [Tree(if, [Tree(condition, [Token(VARIABLE, 'salary'), Token(ACTION_OPERATOR, '>'), Token(SIGNED_NUMBER, '100000')]), Tree(result, [Token(STRING, 'success')]), Tree(condition, [Token(VARIABLE, 'salary'), Token(ACTION_OPERATOR, '<'), Token(SIGNED_NUMBER, '50000')]), Tree(result, [Token(STRING, 'fail')]), Tree(else, [Token(STRING, 'get_more_info')])])]), Tree(else, [Token(STRING, 'fail')])])
Run Code Online (Sandbox Code Playgroud)
我将其转换为字符串:
if age > 18:
if salary > 100000:
print('success')
elif salary < 50000:
print('fail')
else:
print('get_more_info')
else:
print('fail')
Run Code Online (Sandbox Code Playgroud)
我声明变量:
age = 20
salary = 60000
Run Code Online (Sandbox Code Playgroud)
并尝试执行此代码
eval(code)
Run Code Online (Sandbox Code Playgroud)
并得到一个错误
File "<string>", line 1
if age > 18:
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)