2015-11-07 36 views
0

我有一段代码。为什么异常不能正确捕捉?

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

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 
2

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