为什么eval('break')和eval('continue')会失败?

时间:2017-07-20 19:08:20

标签: python python-2.7 eval

我有一个循环,直到用户按下Ctrl + C。

然后要求用户输入y / n。

如果用户按'y',那么我会eval('continue')

如果用户按'n',那么我会eval('break')

while True:
    try:
        ...
    except KeyboardInterrupt:
        ...
        options = {'y':'continue','n':'break'}
        while True:
            decision = raw_input('continue (y/n)?')
            if decision in options:
                break
        eval(options[decision])

当我按'y'时,我得到:

    continue
           ^
SyntaxError: unexpected EOF while parsing

当我按'n'时,我得到:

    break
           ^
SyntaxError: unexpected EOF while parsing

有人可以解释一下我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:4)

eval()仅评估表达式breakcontinue不是表达式,而是(simple) statements

你不能在这里从变量运行这样的语句;编译器需要知道预先将使用这些语句,因为字节码中涉及跳跃偏移。只需使用if测试:

if decision == 'y':
    continue
elif decision == 'n':
    break