python - 在字符串上使用 eval 会引发错误。

标签 python syntax-error eval

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

例如:

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

eval(program)

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

最佳答案

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 更好;您制造的问题会比解决的问题多,尤其是在安全方面。

关于python - 在字符串上使用 eval 会引发错误。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916597/

相关文章:

python - 为目录和所有子目录中的所有 Python 文件运行 Pylint

python - 检查大型数据帧在 python 中合并/组合期间是否出现错误

syntax - “else”的Python语法错误

python - 防止Python在不满足条件的if语句中检查语法错误

r - 如何在另一个函数中传递/评估函数参数以与 ggplot 一起使用?

python - bsddb3-6.0.1 Windows7 构建错误 : _bsddb. obj:错误 LNK2019:函数 newDBObject 中引用的未解析外部符号 db_create

python - pandas:来自 groupby.value_counts() 的字典

scheme - 方案功能(DrRacket)

javascript - 使用 javascript eval 函数传递参数时出现问题...我做错了什么?

python - 在 eval 中修改 Python 全局变量