異常機制是指程式出現錯誤後,程式的處理方法。
當出現錯誤後,程式的執行流程發生改變,程式的控制權轉移到異常處理。exception
類是常用的異常類,該類包括standarderror
,stopiteration
,generatorexit
,warning
等異常類。
standarderror
類是python中的錯誤異常,如果程式上出現邏輯錯誤, 將引發該異常。standarderror類是所有內斂異常的基類,放置在預設的命名空間中,因此使用ioerror,eoferror,importerror等類,不需要匯入exception模組。
stopiteration
類判斷迴圈是否執行到尾部,如果迴圈到尾部,則丟擲該異常。
generatorexit
類是由generator函式引發的異常,當呼叫close()時引發該異常。
warning
類表示程式中的**引起的警告。
python
允許程式設計師自定義異常,用於描述python
中沒有涉及的異常情況,自定義異常必須繼承exception類,自定義異常按照命名規範。
class
divisionexception
(exception)
:def
__init__
(self, x, y)
: exception.__init__(self, x, y)
#呼叫子類的__init__進行初始化
self.x = x
self.y = y
if __name__ ==
"__main__"
:try
: x =
3 y =
2if x % y >0:
#如果大於0, 則不能被初始化,丟擲異常
print
(x / y)
raise divisionexception(x, y)
except divisionexception:
#div 表示divisionexception的例項物件
print
("divisionexcetion: x/y"
)
當程式出現錯誤,python
會自動引發異常,也可以通過raise
顯示地引發異常。一旦執行了raise
語句,raise
後面的語句將不能執行。
try
: s =
none
if s is
none
:print
"s 是空物件"
raise nameerror #如果引發nameerror異常,後面的**將不能執行
print
len(s)
except typeerror:
print
"空物件沒有長度"
try...except
用於處理問題語句,捕獲可能出現的異常。try
子句中的**塊放置可能出現異常的語句,except
子句中的**塊處理異常。語法如下:
try
:# 嘗試執行的**
pass
except 錯誤型別1:
pass
except
(錯誤型別2, 錯誤型別3
): pass
except exception as result:
# 捕獲未知異常
print
("未知錯誤 %s"
% result)
演示try...except
語句捕獲ioerror
異常:
try:
file
("hello.txt"
,"r"
)#如果檔案不存在,引發異常
print
"讀檔案"
except ioerror:
#捕獲io異常
print
"檔案不存在"
except: #其它異常
print
"程式異常"
try...finally
的使用方法。try...except
後還可以新增乙個finally
子句。無論異常是否發生,finally
子句都會被執行。
try
: f =
open
("hello.txt"
,"r"
)try
:print f.read(5)
except
:print
"讀檔案異常"
finally
:print
"釋放資源"
f.close(
)except ioerror:
print
"檔案不存在"
當函式/方法執行出現異常,會將異常傳遞給函式/方法的呼叫一方。如果傳遞到主程式,仍然沒有異常處理,程式才會被終止。
def
demo1()
: num =
int(
input
("please input integer"))
return num
defdemo2()
:return demo1(
)try
: demo2(
)except exception as result:
print
("the error is: {}"
.format
(result)
)
assert
語句用於檢測某個條件表示式是否為真。assert
語句又稱為斷言語句。 Python高階(四) 讀寫檔案
輸入輸出內容 向程式輸入內容使用input hint 函式 標準螢幕輸出內容用print content 函式 expression input please input an expression result eval expression print result 開啟檔案 open path...
python高階 四 魔術方法
魔術方法 在python中,以雙下劃線開頭 雙下劃線結尾的方法我們稱之為魔術方法。例如 init 魔術方法是python內部定義好的,我們不需要去建立。1.new 方法和單例模式 new 方法 create and return a new object.建立物件時觸發class hero obje...
python高階第四天
屬性描述符是實現了特定協議的類,只要實現了 get set 和 delete 三個方法中的任意乙個,這個類就是描述符,它能實現對多個屬性運用相同訪問邏輯的一種方式,通俗來說就是 建立乙個例項,作為另乙個類的類屬性。除了使用類當作乙個屬性描述符,我們之前學習的 property 就是可以輕鬆地為任意屬...