Python之異常設計(一)

2022-03-21 15:58:32 字數 1413 閱讀 9520

一 定義

異常分為兩類:一類是自動觸發異常如除零錯誤;另一類是通過raise觸發。

二 為什麼要使用異常

當程式執行時,如果檢測到程式錯誤,python就會引發異常,我們可以在程式中使用try語句捕獲異常,並對異常進行處理。如果我們不做異常的捕獲,異常就會一直往上層丟擲,直到頂層python的預設異常處理器,預設異常處理器將會停止程式並列印異常,這通常會引起程式崩潰,造成不好的使用者體驗,這不是我們想要的。

乙個函式執行到中間某個部分時,出錯了如何跳出該函式呢,只能通過丟擲異常,讓函式跳出該函式,會跳到上一層捕獲到異常的地方執行

三 捕獲異常

try

: list=[2]

print(list[1]

except

indexerror:

print('

goto exception

')

四 引發異常

try

raise

indexerror

except

indexerror:

print('

goto exception

')

raise 傳遞異常有三種方式

1、raise 給raise提供乙個例項, 當引發異常的時候,如果except中包含了as子句,as 後的變數將會被分配給該例項

2、raise 如果raise乙個類,python會呼叫不帶引數的建構函式建立乙個被引發的例項

3、raise  用於重新引發異常,如果捕獲到異常後,還需要將該異常再往上拋,就可以使用這種方式

五 自定義異常

class

myexception(exception)

pass

defraise_error():

raise

myexception()

try:

raise_error()

except

myexception:

print('

goto

')

六 終止行為 finally

可以通過finally定義不管是否發生異常都執行的行為。當發生異常時,執行finally塊中的**,然後將異常往上拋。比如,我們想要在呼叫的函式執行完或發生異常時,釋放資料庫連線或確保檔案關閉,就可以在finally中來實現

try

:

raise

indexerror

finally

:

pass

py2.6和py3引入了with/as語句,as是可選的,可作為try/finally用法的替代。with/as用於執行一些必須「終止」或「清理」的行為,無論是否引發異常都會進行「終止」或「清理」行為

異常設計實踐

前段時間結合springcloud閘道器處理異常寫了篇 異常處理實踐,側重於異常的處理。作為強迫症患者,本次撰寫下如何進行異常設計並提供具體的 異常結構取決於其應用場景,與其關聯的角色有 使用者 運營人員 技術人員.由於大部分資料在處理異常時均可以獲取到,因此異常結構可以十分精簡,結構如下 業務系統...

關於JAVA的異常設計模式

最近在做專案struts spring hibernate的,感覺自己對於設計異常方面有些不是很明白。已經知道這樣的知識 在程式的dao層中不要捕獲異常,而將它拋給service層,然後spring的事務宣告就寫給service層,最終在action中來try catch 業務層service丟擲的...

系統異常設計規範與原則

良好的異常資訊展示,開發運維人員能快速定位問題。響應外部呼叫異常時,應能明確指明是內部異常還是呼叫條件不滿足導至。響應使用者操作異常時,能友好的提示使用者。如何做到以上3點?內部異常 資源環境導致 系統環境異常 資料庫連線超時 第三方服務響應超時 第三方服務錯誤響應 第三方響應結果錯誤 外部傳入引數...