eval 语法错误:Python 中的无效语法

31 投票
3 回答
42433 浏览
提问于 2025-04-17 23:17

我想要赋值:

x0='123'    
x1='123'    
x2='123'    
x3='123'    
x4='123'    
x5='123'    
x6='123'    
x7='123'    
x8='123'    
x9='123'    

我写的代码是想表达,当输入 x1x8 时,可以得到字符串 123 的输出。

for i in range(0,10):
    eval("x"+str(i)+"='123'")

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<string>", line 1
  x0='123'
  ^
SyntaxError: invalid syntax

我该怎么做呢?


千万不要在可能来自程序外部的数据上使用 eval(或 exec)。这会带来严重的安全风险。因为这样会让数据的作者在你的电脑上运行任意代码。 如果你来这里是因为想在你的 Python 程序中按照某种模式创建多个变量,你几乎肯定遇到了 XY 问题。根本不要创建那些变量 - 而是,适当地使用列表或字典

3 个回答

-3

你可以使用这个表达式。

eval('"x"+str(i)+"="+"123"')
26

eval() 这个函数只能用来处理 表达式。赋值操作不是表达式,而是一个语句;所以你需要用 exec 来代替。

即便如此,你还可以使用 globals() 这个字典来把名字添加到全局命名空间里,这样就不需要执行任何随意的表达式了。

真的 不想这样做,你需要 避免把数据放进变量名里,而是应该使用列表或字典:

x = ['123'] * 10

这样你就可以用 x[0]x[1] 等来访问列表里的内容,而不需要执行任何随意的表达式。

54

要动态执行语句,可以使用 exec 函数:

>>> exec('y = 3')
>>> y
3

eval 的用法是:eval(expression)

这里的 expression 参数会被解析并作为一个 Python 表达式来计算。

例如:

>>> s = 3
>>> eval('s == 3')
True
>>> eval('s + 1')
4
>>> eval('s')
3
>>> eval('str(s) + "test"')
'3test'

撰写回答