如何讓程式更穩健 異常處理

2021-10-10 07:46:25 字數 3062 閱讀 8715

異常是指程式執行時引發的錯誤, 引發錯誤的方式有很多,例如,除0、下標越界、檔案不存在、網路異常、型別錯誤等等。 出現錯誤將會導致程式終止 。如果能合理的使用異常處理結構,對程式可能出現的異常進行處理,將python晦澀難懂的錯誤提示轉化為對使用者更加友好、更加清晰明了的提示,就能使得程式更加健壯,具有更強的容錯性 。

python 中所有的異常基類 是baseexception, 其他的所有的異常類都是從這繼承的子類。

主要的異常類如下:

baseexception

所有異常基類

systemexit

直譯器請求退出

keyboardinterrupt

使用者中斷執行(通常是輸入^c)

generatorexit

生成器(generator)發生異常來通知退出

exception

常規錯誤

warning

警告基類

try except

異常處理結構最常見的也是最基本的是try except 結構,try 之後的**塊是可能出現異常的語句, except 子句用來捕捉相應的異常。

如果沒有捕捉到異常, 則繼續往下執行; 如果出現異常被except 捕獲, 則執行except 塊; 如果出現異常沒有**獲,則向外層丟擲。

結構如下:

try:

try 塊

except exception[

as reason]

:except 塊

例如以下要求使用者輸入整數的的程式:

while1:

try:

x =int(

input

('please input a number'))

break

except valueerror:

print

('this is not a valid number.try again'

)# 執行

please input a number:

'a'this is

not a valid number.try again

please input a number:

1.5

this is

not a valid number.try again

please input a number:

1

try except else
while1:

try:

x =int(

input

('please input a integer:'))

except valueerror:

print

('this is not a valid number.try again'

)else

:print

('you\'ve successfully entered an integer'

)break

# 執行

please input a integer:

1 you've successfully entered an integer

try 結構帶有多個except

同一段**可能會丟擲多個異常, 需要針對不同的異常做相應的處理, 多個except 塊就支援多個異常捕捉處理, 多分支結構,一旦某個except捕獲了異常,則後面剩餘的except將不再執行。 (如果可能出現多個異常,而不要分別處理,可以將異常寫在乙個元組中)

while1:

try:

x =input

('請輸入被除數:'

) y =

input

('請輸入除數:'

) z =

float

(x)/

float

(y)except zerodivisionerror:

print

('除數不能為0'

)except valueerror:

print

('被除數和除數應為數值型別'

)else

:print

(x,'/'

,y,'='

,z)break

# 執行

請輸入被除數:a

請輸入除數:b

被除數和除數應為數值型別

請輸入被除數:1

請輸入除數:21

/2=0.5

try except finally

另一種重要的異常處理結構是 try except finally , finally 子句中的語句塊無論是否發生異常都會執行,常用來做一些清理工作。

try

: f =

open

('test.txt'

,'r'

) line = f.readline(

)print

(line)

finally

: f.close(

)

無論讀取是否發生異常,一定能確保關閉該檔案。

斷言斷言語句的語法是 assert expression [, reason] 。 當判斷表示式expression為真時,什麼都不做, 如果為假,則丟擲異常。

斷言常常用來拋出自定義的異常, 然後和try except語句一起使用 ;

try

: x =

float

(input

('請輸入乙個正數 :'))

assert x>

0except assertionerror :

print

('這不是正數'

)# 執行

請輸入乙個正數 :-1

這不是正數

以上就是python 異常類和異常處理結構了 。

參考文獻:

1 董付國 ,python程式設計 ,清華大學出版社

2 菜鳥筆記, python異常處理結構

異常處理程式(Exception handler)

當然,丟擲的異常必須在某處得到處理。這個 地點 就是 異常處理程式 exception handler 針對每個要捕獲的異常,你得準備相應的處理程式。異常處理程式緊跟在 try 區塊之後,以關鍵字 catch 表示 try catch type1 id1 catch type2 id2 catch ...

程式的異常處理

二 什麼時候處理異常 僅當以下一種或多種情況時,我們的 才需要抓住異常 1.記錄異常 logging 將異常記錄到日誌中,便於support人員查詢錯誤原因。2.為這個異常新增相關資訊 wrap exception 加發生異常的環境資訊記錄,並產生新異常,交給呼叫本方法的 負責處理。3.執行清理工作...

一 如何合適處理程式的異常

關於函式可能丟擲的異常的一些宣告 void f throw 表示f不允許丟擲任何異常,即f是異常安全的。void f throw 表示f可以丟擲任何形式的異常。void f throw exceptiontype 表示f只能丟擲exceptiontype型別的異常。宣告乙個不丟擲異常的函式後,你有責...