2015-11-07 35 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,否則無論是否存在異常它都會執行。