我有一个程序,它生成一个 python 程序作为一个字符串,然后我需要执行它。但是,当我尝试运行该字符串时,它会引发语法错误。
例如:
program = "self.move() self.turnRight() if x > 0: self.turnLeft() else: self.turnRight()"
eval(program)
当它运行时,无论第二个命令是什么,都会抛出语法错误。我假设这是因为字符串缺少制表符或换行符。当字符串通过 eval 命令时,有没有办法自动添加这些?
最佳答案
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
更好;您制造的问题会比解决的问题多,尤其是在安全方面。
关于python - 在字符串上使用 eval 会引发错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916597/