第二十八天筆記

2022-09-02 19:00:07 字數 3708 閱讀 7304

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點多就不困了,天氣有點冷,醒了。告訴自己,都是正常的。確實是正常的。都是人最直觀的感受。改變固有思維,以前會聯想很多造成的,讓自己越來越膽小。可這一切都是那麼的正常。固定的生物鐘也改起了。一切放輕鬆。不怪以前的自己,畢竟自己一天比一天好。多學習別人身上的優點,不狹隘。不能因為環境冷了,而埋怨自...