eval 语法错误:Python 中的无效语法
我想要赋值:
x0='123'
x1='123'
x2='123'
x3='123'
x4='123'
x5='123'
x6='123'
x7='123'
x8='123'
x9='123'
我写的代码是想表达,当输入 x1
或 x8
时,可以得到字符串 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'