【问题标题】:eval SyntaxError: invalid syntax in pythoneval SyntaxError:python 中的语法无效
【发布时间】:2014-03-21 12:18:05
【问题描述】:

我要分配:

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

我怎么能这样做?

【问题讨论】:

标签: python


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    即便如此,您也可以使用 globals() 字典将名称添加到全局命名空间,而无需使用任何任意表达式执行。

    真的不想这样做,您需要keep data out of your variable names 并改用列表或字典:

    x = ['123'] * 10
    

    会给您一个列表,您可以使用x[0]x[1] 等来寻址,而无需执行任意表达式。

    【讨论】:

      【解决方案3】:

      你可以这样表达。

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

      【讨论】:

        猜你喜欢
        • 2020-07-13
        • 2023-01-22
        • 1970-01-01
        • 2017-05-07
        • 2022-01-10
        • 2021-07-20
        • 2020-05-31
        • 2017-09-21
        相关资源
        最近更新 更多