eval SyntaxError:python 中的语法无效

新手上路,请多包涵

我想分配:

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

我编写代码来表示当输入 x1123 时,我可以获得字符串的输出 x8

 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 问题。根本不要创建这些变量——而是 适当地使用列表或字典

原文由 showkey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

对于语句的动态执行,使用 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'

原文由 suhailvs 发布,翻译遵循 CC BY-SA 4.0 许可协议

eval() 只允许 _表达式_。赋值不是表达式而是语句;您必须改用 exec

即使那样,您也可以使用 globals() 字典将名称添加到全局命名空间,并且您不需要使用任何任意表达式执行。

真的 不想这样做,您需要 将数据保留在变量名称之外 并改用列表或字典:

 x = ['123'] * 10

会给你一个列表,你可以将其定位为 x[0]x[1] 等,而无需执行任意表达式。

原文由 Martijn Pieters 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏