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

时间:2015-11-07 06:36:57

标签: python python-2.7 exception-handling try-catch

我有一段代码。

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,那么甚至不会打印错误消息,并且程序正在通过回溯调用退出。

2 个答案:

答案 0 :(得分:2)

您的finally应为else,否则无论是否存在异常,都会执行。

答案 1 :(得分:2)

无论是否捕获到异常,finally子句始终都会运行。您需要else,它在 no 例外时运行。

另外:您不需要while的括号,并且您可能希望raw_input函数比使用sys.stdin直接使用更好一些。< / p>

所以我会这样做:

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