在要開始進入函式跟一些深入的程式介紹時,我想先談談程式錯誤的部分。畢竟未來在撰寫大量程式碼時,一定有機會發生錯誤,然後還搞不懂問題出在哪,所以才有了"例外處理"來幫助我們。那麼越想要程式正常執行就要越清楚問題點在哪,以下就開始一一介紹吧~
程式的錯誤可以分成三種:
顧名思義,這種錯誤就是程式碼不符合程式語言的語法。例如指令單字拼錯、大小寫不對,或是格式不對,都是屬於語法錯誤。其實這種錯誤最容易發現,一般在初步偵錯工具時就會出現紅紅的讓你改正,所以不必大費周章花時間在處理這方面的錯誤。
如果程式可以執行,語法上看起來也沒問題,但獲得的結果卻是錯誤的,就是發生邏輯錯誤。例如寫錯變數名稱、將值錯誤地指定到別的地方,或是百分比輸出沒乘上100等。講直白點就是自己邏輯上想錯了,還是哪裡忘記加東西,通常細心一點慢慢觀察就行。
當程式執行到一半時,被強制結束,無法執行完畢,就是發生執行錯誤。例如除數為0、使用者非法輸入、要開啟的檔案已不存在等。這種錯誤,在Python中會歸類在「例外」(Exceptions),而等等要講的例外處理也就是針對這種錯誤。
執行錯誤通常不太容易被發現,而且通常在沒有其他語法錯誤的情況下發生的,所以才需要例外處裡來輔助設計者。例外處理是一種特殊的語法格式,由try和except這兩個主要指令組成,再加上兩個選擇性的else和finally指令。以下是它的完整語法,通常只要有主要指令就行了,還請搭配流程圖一起看:
try:
#想要的程式碼
...
except(例外錯誤類型1, 例外錯誤類型2,...) as 例外物件:
#發生例外錯誤類型1、2時,要執行的程式碼
#還可以在繼續增加except指令
else:
#try指令的程式順利執行完畢,沒發生錯誤時執行
...
finally:
#不管有沒有發生錯誤,最後都會執行
...
例外處理流程圖:
那麼除了瞭解它的語法格式之外,還要知道各種「例外錯誤類型」的使用時機。下面先放上書中整理的圖:
這裡也就不一一說明其功用了,因為這些通常是有需要才會去用,平時根本記不起所有例外類型當然你大可以用Exception類型去抓所有非系統運作的錯誤,不過這樣就會成為很懶惰的程式人員。程式就是要盡量明確地指定要處理哪一種例外錯誤,如此才能幫助自己學習,讓整個程式執行下來會比較完整。以下就來舉個我們常用的例子吧:
while True:
try:
age = int(input('請輸入年齡:'))
if age<=0:
print('有誰年齡是負的!好好打!')
continue
except ValueError: #抓非整數的時候
print('打個數字有很難嗎??')
except KeyboardInterrupt: #抓按下Crtl+C的時候
print('為什麼你要按複製?懶?')
else:
if age<30:
print('你的年齡是%d歲,很年輕喔~'%(age))
elif 30<=age<=90:
print('你的年齡是%d歲,要把握生命每一刻喔~'%(age))
else:
print('你的年齡是%d歲,很長壽喔~要繼續加油!'%(age))
break
執行結果
請輸入年齡:hello
打個數字有很難嗎??
請輸入年齡:好兇QQ
打個數字有很難嗎??
請輸入年齡:-123
有誰年齡是負的!好好打!
請輸入年齡:
為什麼你要按複製?懶?
請輸入年齡:20
你的年齡是20歲,很年輕喔~
好啦大致上先這樣,明天來跟函式玩~