異常是指程式執行時引發的錯誤, 引發錯誤的方式有很多,例如,除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 elsewhile1:
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型別的異常。宣告乙個不丟擲異常的函式後,你有責...