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("程序有點小問題,請聯繫管理員")