我有一个程序,它生成一个python程序作为字符串,然后我需要执行。但是,当我尝试运行该字符串时,它会引发语法错误。
例如:
program = "self.move() self.turnRight() if x > 0: self.turnLeft() else: self.turnRight()"
eval(program)
当运行时,无论第二个命令是什么,都会抛出语法错误。我假设这是因为字符串缺少制表符或换行符。有没有办法在字符串通过eval命令时自动添加这些?
答案 0 :(得分:5)
eval
只能处理单个 Python expression,而且不能处理任何声明(simple或compound)。
您的字符串包含多个表达式和语句。您必须改为使用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和eval
或exec
;你会创造出比你更难解决的问题,特别是在安全方面。