在字符串抛出时使用eval错误。

时间:2014-04-07 15:21:17

标签: python syntax-error eval

我有一个程序,它生成一个python程序作为字符串,然后我需要执行。但是,当我尝试运行该字符串时,它会引发语法错误。

例如:

program = "self.move() self.turnRight() if x > 0: self.turnLeft() else: self.turnRight()"

eval(program)

当运行时,无论第二个命令是什么,都会抛出语法错误。我假设这是因为字符串缺少制表符或换行符。有没有办法在字符串通过eval命令时自动添加这些?

1 个答案:

答案 0 :(得分:5)

eval只能处理单个 Python expression,而且不能处理任何声明(simplecompound)。

您的字符串包含多个表达式语句。您必须改为使用exec

program = '''\
self.move()
self.turnRight()
if x > 0:
    self.turnLeft()
else:
    self.turnRight()
'''

exec program

如果您要使用条件表达式,则可以使其成为3个单独的表达式:

program = ['self.move()', 'self.turnRight()',
           'self.turnLeft() if x > 0 else self.turnRight']
for line in program:
    eval(program)

请注意,实现更具体的语言总是更好的主意,而不是重复使用Python和evalexec;你会创造出比你更难解决的问题,特别是在安全方面。