相关疑难解决方法(0)

eval,exec和compile之间有什么区别?

我一直在寻找的Python代码动态评估,并遇到了eval()compile()功能,以及exec声明.

有人可以解释之间的区别evalexec怎样的不同模式,compile()适应吗?

python eval dynamic exec

403
推荐指数
3
解决办法
19万
查看次数

为什么Python的eval()拒绝这个多行字符串,我该如何解决?

我试图评估以下制表符缩进的字符串:

'''for index in range(10):
        os.system("echo " + str(index) + "")
'''
Run Code Online (Sandbox Code Playgroud)

我明白了,"有一个错误:语法无效,第1行"

有什么抱怨的?我是否需要缩进以匹配eval()语句,或将其写入字符串文件或临时文件并执行该操作或其他内容?

谢谢,

python eval metaprogramming python-3.x

11
推荐指数
4
解决办法
1万
查看次数

Python:使用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)

python

5
推荐指数
1
解决办法
2239
查看次数

标签 统计

python ×3

eval ×2

dynamic ×1

exec ×1

metaprogramming ×1

python-3.x ×1