1. 什麼是異常處理異常是錯誤發生的訊號,一旦程式出錯就會產生乙個異常,如果該異常
沒有被應用程式處理,那麼該異常就會丟擲來,程式的執行也隨之終止
異常包含三個部分:
1. traceback異常的追蹤資訊
2. 異常的型別
3. 異常的資訊
錯誤分為兩大類
1. 語法上的錯誤:在程式執行前就應該立即修正
2. 邏輯上的錯誤
2. 為何要異常處理
避免程式因為異常而崩潰,所以在應用程式中應該對異常進行處理,從而增強程式的健壯性
3. 如何異常處理
try:
**1
**2
**3
......
except nameerror: 當
丟擲的異常是nameerror時執行的子**塊
except ....:
pass except ...:
pass else:
pass finally:
pass
異常處理的單分支try:
print('*****1')
print('*****2')
print('*****3')
d =
# d['z'] # keyerror
print('*****4')
l = [1, 2, 3]
l[1000] # indexerror
print('*****5') except indexerror:
print('indexerror')
print('other code')
結果:*****1
*****2
*****3
*****4
indexerror
other code
異常處理的多分支try:
print('*****1')
print('*****2')
print('*****3')
d =
# d['z'] # keyerror
print('*****4')
l = [1, 2, 3]
l[1000] # indexerror
print('*****5')
except keyerror as e:
print('keyerror',e)
except indexerror as e:
print('indexerror',e)
print('other code')
結果:*****1
*****2
*****3
*****4
indexerror list index out of range
other code
(會往下執行,如果不是keyerror和 indexerror的錯,就會不列印other code)
萬能異常型別exception:可以匹配任意型別的異常
try... else... else必須放到後面,else的子**塊會在被檢測的**沒有異常的情況下執行
finally:無論被檢測的**有沒有異常都會執行
主動觸發異常
自定義異常型別(了解)class myexception(baseexception):
def __init__(self,msg):
super().__init__()
self.msg=msg
def __str__(self):
return '<%s>' %self.msg
raise myexception('我自定義的異常')
斷言(了解)
print('上半部分,生產資料')
l=[1,2,3,4]
if len(l) != 5:
raise typeerror('列表的長度必須為5')
assert len(l) == 5
print('下半部分,處理資料')
1 什麼是元類: # 源自一句話:在python中,一切皆物件,而物件都是由類例項化得到的物件tea1是呼叫oldboyteacher類得到的,如果說一切皆物件,那麼oldboyteacher也是乙個物件,只要是物件 都是呼叫乙個類例項化得到的,即oldboyteacher=元類(...),內建的元類是type
關係: 1. 呼叫元類---->自定義的類
2. 呼叫自定義的類---->自定義的物件
class關鍵字建立自定義類的底層的工作原理,分為四步1. 先拿到類名:'oldboyteacher'
2. 再拿到類的基類們:(object,)
3. 然後拿到類的命名空間???(執行類體**,將產生的名字放到類的命名空間也就是乙個字典裡,補充exec)
4. 呼叫元類例項化得到自定義的類: oldboyteacher=type('oldboyteacher',(object,),)
自定義類的三個關鍵組成部分:
1. 類名
2. 類的基類們
3. 類的命名空間
不依賴class關鍵字建立乙個自定義類# 1. 拿到類名
class_name='oldboyteacher'
#2. 拿到類的基類們
(object,) class_bases=(object,)
#3. 拿到類的命名空間
class_dic={}
控類的產生
# 1.類名必須用駝峰體
# 2.類體必須有文件注釋,且文件注釋不能為空
class mymeta(type): #但凡繼承了type的類才能稱之為自定義的元類,否則就是只是乙個普通的類
總結:物件之所以可以呼叫,是因為物件的類中有乙個函式__call__
#推導:如果一切皆物件,那麼oldboyteacher也是乙個物件,該物件之所可以呼叫,肯定是這個物件的類中也定義了乙個函式__call__
例項化oldboyteacher,或者說呼叫oldboyteacher會
# 1. 先產生乙個空物件
# 2. 執行__init__方法,完成物件的初始屬性操作
# 3. 返回初始化好的那個物件
# 推導:呼叫oldboyteacher(...)就是在呼叫oldboyteacher的類中的__call__,那麼在該__call__中就需要做上述三件事
自定義元類來控制類的呼叫(即類的例項化過程)
class mymeta(type): #但凡繼承了type的類才能稱之為自定義的元類,否則就是只是乙個普通的類
第二十八天
1 建立乙個名稱為itcast的資料庫。create database itcast 2 設計資料表tb student的字段結構,欄位有id 學號 name 姓名 age 年齡 enrolmentdate 入學時間 並選擇適合的資料型別。tb student資料表的字段結構如下表所示 欄位名 型別...
蛻變,第二十八天
1 什麼是包 包是模組的一種形式,包的本質就是乙個含有 init py檔案的資料夾 2.為什麼要有包 因為如果我們要把我們寫的一大堆功能分類處理,並且數量眾多,我們需要進行分檔案儲存,則需要用到包的概念 3 如何用包 匯入包就是在包下的 init py import from import 注意的問...
冥想第二十八天
今天5點多就不困了,天氣有點冷,醒了。告訴自己,都是正常的。確實是正常的。都是人最直觀的感受。改變固有思維,以前會聯想很多造成的,讓自己越來越膽小。可這一切都是那麼的正常。固定的生物鐘也改起了。一切放輕鬆。不怪以前的自己,畢竟自己一天比一天好。多學習別人身上的優點,不狹隘。不能因為環境冷了,而埋怨自...