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

goo*_*ion -3 python eval python-2.7

我有一个循环,它一直运行直到用户按下 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])
Run Code Online (Sandbox Code Playgroud)

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

    continue
           ^
SyntaxError: unexpected EOF while parsing
Run Code Online (Sandbox Code Playgroud)

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

    break
           ^
SyntaxError: unexpected EOF while parsing
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 5

eval()只计算表达式breakcontinue不是表达式,它们是(简单的)语句

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

if decision == 'y':
    continue
elif decision == 'n':
    break
Run Code Online (Sandbox Code Playgroud)

  • @cᴏʟᴅsᴘᴇᴇᴅ:goodvibration对SO来说并不新鲜,他们之前提出并接受了问题:-)这个问题还不到15分钟,所以他们“不能”还不能。 (2认同)