1. 程式人生 > >python 錯誤異常處理

python 錯誤異常處理

通常異常處理分為三大類

語法錯誤 語意錯誤 邏輯錯誤

語法錯誤

這裡寫圖片描述

語法錯誤一般都是少寫了些標點符號
只要console看到SyntaxError 幾乎都是語法錯誤

語義錯誤

例如 除以0為語義錯誤

這裡寫圖片描述

邏輯錯誤

邏輯錯誤是比較難排查的,它跟程式碼無關,跟程式碼的設計有關
例如使用不當的迴圈,程式碼不報錯,但是結果不是你想要的
這類的話要分析考慮你的流程,或者設計是不是有問題。

異常處理

程式碼有問題我們肯定要做出處理
就是把有可能出現錯誤的地方放到一個程式碼層面上去
try:
嘗試
eccept 明確的型別錯誤:

except:
捕獲
else:
都沒捕獲

try:
    x = 5 / 0
    print(x)
except ZeroDivisionError:
    print('不能除0')
except:
    print('其它錯誤')
else:
    print('沒有異常')

這裡寫圖片描述

打印出異常的詳細資訊
這裡寫圖片描述

例子2:
打印出類的name
這裡寫圖片描述

如果打印出age會報錯:
這裡寫圖片描述

做出異常處理的程式碼:

class person:
    def __init__(self,name):
        self.name = name

p = person('peter'
) try: print(p.age) except AttributeError as e: print('屬性錯誤 詳細資訊:',e) except: print('其它錯誤') else: print('沒有錯誤')

這裡寫圖片描述

finally 最終的意思
不管檔案有沒有異常最終都要處理的資訊
那麼什麼時候加finally呢??
它是針對一些有需要釋放資源的東西
例如 檔案 資料庫…. 讀寫一些內容遇到了問題,而檔案已經打開了,中間如果遇到異常終止退出來的話,可能會影響後續的操作
所以要用finally

try:
    f = open('date.txt'
) f.read() except: print('檔案操作遇到錯誤') finally: f.close()

這裡寫圖片描述

異常有時候不一定非把它截斷
但實際開發中有一個原則,在程式中有一個異常,不能就這麼悄悄的過,你必須要處理 哪怕不處理至少要讓它丟擲來 終止程式

有的時候我們需要手動的丟擲異常

手動丟擲異常

這裡寫圖片描述

手動丟擲異常有什麼意義呢???
例如:我們在c#,或者java定以了一個介面,而這個介面是必須要實現的,那這樣我們可以把它寫到一個方法裡面

def method():
    raise NotImplementedError('該方法程式碼還未實現')

method()

這裡寫圖片描述