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命令时自动添加这些?
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和一个更好的主意eval或exec; 你会创造出比你要解决的问题更多的问题,特别是在安全方面.