在程序運行時,如果我們的代碼引發了錯誤,python就會中斷程序,並且輸出錯誤提示。
比如我們寫了一句:
print int('0.5')
運行後程序得到錯誤提示:
Traceback (most recent call last):
File "C:/Python27/test.py", line 1, in <module>
print int('0.5')
ValueError: invalid literal for int() with base 10: '0.5'
意思是,在test.py這個文件,第1行,print int('0.5')這裡,你拿了一個不是10進位能夠表示的字符,我沒法把它轉成int值。
上面的錯誤可以避免,但在實際的應用中,有很多錯誤是開發者無法控制的,例如用戶輸入了一個不合規定的值,或者需要打開的文件不存在。這些情況被稱作「異常」,一個好的程序需要能處理可能發生的異常,避免程序因此而中斷。
例如我們去打開一個文件:
f = file('non-exist.txt')
print 'File opened!'
f.close()
假如這個文件因為某種原因並沒有出現在應該出現的文件夾裡,程序就會報錯:
IOError: [Errno 2] No such file or directory: 'non-exist.txt'
程序在出錯處中斷,後面的print不會被執行。
在python中,可以使用try...except語句來處理異常。做法是,把可能引發異常的語句放在try-塊中,把處理異常的語句放在except-塊中。
把剛才那段代碼放入try...except中:
try:
f = file('non-exist.txt')
print 'File opened!'
f.close()
except:
print 'File not exists.'
print 'Done'
當程序在try內部打開文件引發異常時,會跳過try中剩下的代碼,直接跳轉到except中的語句處理異常。於是輸出了「File not exists.」。如果文件被順利打開,則會輸出「File opened!」,而不會去執行except中的語句。
但無論如何,整個程序不會中斷,最後的「Done」都會被輸出。
在try...except語句中,try中引發的異常就像是扔出了一隻飛盤,而except就是一隻靈敏的狗,總能準確地接住飛盤。
#==== Crossin的編程教室 ====#
微信ID:crossincode
QQ群:312723402
面向零基礎初學者的編程課
每天5分鐘,輕鬆學編程
回復『 p 』查看課程目錄
回復『 t 』查看習題列表
點擊「閱讀原文」可進入討論版