python 錯誤異常處理
阿新 • • 發佈:2019-02-19
通常異常處理分為三大類
語法錯誤 語意錯誤 邏輯錯誤
語法錯誤
語法錯誤一般都是少寫了些標點符號
只要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()