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

Chr*_*and 1 python eval syntax-error

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

例如:

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

eval(program)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 5

eval只能处理一个单一 的Python表达式,并且没有声明(简单化合物).

您的字符串包含多个表达式语句.你必须使用exec:

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

exec program
Run Code Online (Sandbox Code Playgroud)

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

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

需要注意的是它始终是实现一个更具体的语言,而不是重新使用Python和一个更好的主意evalexec; 你会创造出比你要解决的问题更多的问题,特别是在安全方面.