python中認識異常,合理利用異常
- 2019 年 10 月 4 日
- 筆記
一、知識回顧:
上一節,我們講了生成器,我們先來回顧一下生成器的使用。
生成器:yield使得函數凍結且提交一個值。
每次使用生成器,我們以前都使用了for循環,實際上使用的是next函數來進行下一次迭代。
總結得出,我們使用的生成器依賴於一個函數。
所謂遞歸生成器,實則是在生成器中,再次調用生成器。
上一次我們沒有實測next函數調用的問題,以下進行補充。
補充next函數:
作用:主要是用來返回下一次迭代器的返回值。
使用方法:next(迭代器,[默認值])
如果直接使用兩次調用自定義迭代器函數的方式,將返回的是每一次迭代器的初始位置的值,也就是說,指針總是指向的是初始的位置。
我們應該把自定義的迭代器賦值給一個變量,然後再使用next函數對這個變量進行下一次迭代。
舉例:
#使用變量來表示一個實際的生成器對象
scq=shengChengqi()
print(next(scq))
print(next(scq))
本節知識視頻教程
二、異常概述
提問:什麼是異常?
不是普通的正常的代碼執行情況。實際上是屬於系統內代碼有問題導致的報錯。異常,我們往往使用Exception來表示。
三、異常的分類
我們這裡討論的異常主要分為兩大類。
一類是自動自動拋出的異常,系統編譯器自動判斷來拋出異常。
舉例:
laoliuAge=31/0
拋出異常ZeroDivisionError: division by zero
一類是人工手動拋出的異常,使用raise來手動拋出。
手動拋出異常使用:raise Exception,這裡的Exception是一個異常類,類的話我就可以使用構造方法進行初始值的傳入。也就是說傳入的是異常的描述。我們可以使用raise Exception(「這裡是我們的自定義異常」)
提問:實際中我們如何使用手動來拋出異常?
我們往往需要結合一些條件判斷來手工拋出異常。
舉例如下:
a=1
if a==1:
raise Exception("這裡是老劉拋出的異常")
else:
print("沒有異常")
三、異常的利用
舉例:
1.判斷是否是int類型的數據
2.判斷是否是string類型的數據
歸納一下:
1.我們可以利用異常來做一些數據類型的轉換。
2.我們可以利用異常來進行數據類型的判斷。
四、重要的內建類異常
- Exception所有異常的基類
- AttributeError屬性引用或屬性失敗時拋出的異常
- OSError當操作系統無法執行任務時拋出的異常
- IndexError在使用序列中不存在的索引時拋出的異常
- KeyError在使用映射中不存在的鍵值時拋出的異常
- NameError找不到名字(變量)時拋出的異常
- SyntaxError在代碼為錯誤形式時觸發
- TypeError在內建操作或函數應用於錯誤類型的對象時拋出的異常
- ValueError在內建操作或者函數應用於正確類型的對象,但該對象使用了不適合的值時拋出的異常
- ZeroDivisionError在除法或者取模操作的第2個參數值為0時拋出的異常
五、總結強調
1.理解什麼是異常?
2.理解異常的分類
3.掌握手動拋出異常的方法
4.學會利用異常,把異常的拋出為己所用
本節源代碼:
# def shengChengqi(): # list1=[3,5,2] # for i in list1: # yield i # # #使用變量來表示一個實際的生成器對象 # scq=shengChengqi() # print(next(scq)) # print(next(scq)) # print(next(scq)) # print(next(scq)) # laoliuAge=31/0 # a=1 # if a==1: # raise Exception("這裡是老劉拋出的異常") # else: # print("沒有異常") b="2" c=int(b)+2 # try: # c=b+2 # print(c) # except: # print("程序有點小問題,請聯繫管理員")