为什么没有正确捕获异常?

Why exception is not properly caught?

我有一段代码。

import sys

while(True):
  print "Enter a number: "
  try:
    number = int(sys.stdin.readline())
  except ValueError:
    print "Error! Enter again an integer value"
    continue
  finally:
    print number
    break

这里我希望当我输入一个非整数时,输出应该是

Error! Enter again an integer value

然后它应该要求输入。但它正在打印消息但要求进一步输入。请解释它或者如果我认为它是错误的。

如果我使用 NameError 进行处理,则错误消息甚至不会被打印出来,程序将通过回溯调用退出。

你的finally应该是else,否则不管有没有异常都会执行

finally 子句总是 运行,无论异常是否被捕获。您需要 else,它在 没有 异常时运行。

此外:您不需要 while 的括号,您可能需要 raw_input 函数,它比直接使用 sys.stdin 更好用。

所以我会这样做:

while True:
    try:
        number = int(raw_input("Enter a number: "))
    except ValueError:
        print "Error! Enter again an integer value"
        continue
    else:
        print number
        break