什麼是異常
當檢測到一個錯誤時,Python解釋器就無法繼續執行了,反而出現了一些錯誤的提示,這就是所謂的“異常”, 也就是我們常說的BUG

bug單詞的誕生
早期計算機采用大量繼電器工作,馬克二型計算機就是這樣的。 1945年9月9日,下午三點,馬克二型計算機無法正常工作了,技術人員試了很多辦法,最後定位到第70号繼電器出錯。負責人哈珀觀察這個出錯的繼電器,發現一隻飛蛾躺在中間,已經被繼電器打死。她小心地用攝子将蛾子夾出來,用透明膠布帖到“事件記錄本”中,并注明“第一個發現蟲子的執行個體。”自此之後,引發軟體失效的缺陷,便被稱為Bug。
異常示範
例如:以`r`方式打開一個不存在的檔案。
f = open('linux.txt', 'r')
異常的捕獲方法
為什麼要捕獲異常
世界上沒有完美的程式,任何程式在運作的過程中,都有可能出現:異常,也就是出現bug 導緻程式無法完美運作下去。
我們要做的,不是力求程式完美運作。 而是在力所能及的範圍内,對可能出現的bug,進行提前準備、提前處理。
這種行為我們稱之為:異常處理(捕獲異常)
當我們的程式遇到了BUG, 那麼接下來有兩種情況:
① 整個程式因為一個BUG停止運作
② 對BUG進行提醒, 整個程式繼續運作
顯然在之前的學習中, 我們所有的程式遇到BUG就會出現①的這種情況, 也就是整個程式直接奔潰. 但是在真實工作中, 我們肯定不能因為一個小的BUG就讓整個程式全部奔潰, 也就是我們希望的是達到② 的這種情況 那這裡我們就需要使用到捕獲異常
捕獲異常的作用在于:提前假設某處會出現異常,做好提前準備,當真的出現異常的時候,可以有後續手段。
捕獲正常異常
基本文法:
try:
可能發生錯誤的代碼
except:
如果出現異常執行的代碼
快速入門
需求:嘗試以`r`模式打開檔案,如果檔案不存在,則以`w`方式打開。
try:
f = open('linux.txt', 'r')
except:
f = open('linux.txt', 'w')
捕獲指定異常
try:
print(name)
except NameError as e:
print('name變量名稱未定義錯誤')
① 如果嘗試執行的代碼的異常類型和要捕獲的異常類型不一緻,則無法捕獲異常。
② 一般try下方隻放一行嘗試執行的代碼。
捕獲多個異常
try:
print(1/0)
except (NameError, ZeroDivisionError):
print('ZeroDivision錯誤...')
捕獲異常并輸出描述資訊
try:
print(num)
except (NameError, ZeroDivisionError) as e:
print(e)
捕獲所有異常
try:
print(name)
except Exception as e:
print(e)
異常else
else表示的是如果沒有異常要執行的代碼。
try:
print(1)
except Exception as e:
print(e)
else:
print('我是else,是沒有異常的時候執行的代碼')
異常的finally
finally表示的是無論是否異常都要執行的代碼,例如關閉檔案。
try:
f = open('test.txt', 'r')
except Exception as e:
f = open('test.txt', 'w')
else:
print('沒有異常,真開心')
finally:
f.close()
異常的傳遞
異常是具有傳遞性的
當函數func01中發生異常, 并且沒有捕獲處理這個異常的時候, 異常 會傳遞到函數func02, 當func02也沒有捕獲處理這個異常的時候 main函數會捕獲這個異常, 這就是異常的傳遞性.
提示: 當所有函數都沒有捕獲異常的時候, 程式就會報錯