《Python程序設(shè)計》課件-第9講 異常_第1頁
《Python程序設(shè)計》課件-第9講 異常_第2頁
《Python程序設(shè)計》課件-第9講 異常_第3頁
《Python程序設(shè)計》課件-第9講 異常_第4頁
《Python程序設(shè)計》課件-第9講 異常_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第9講異常(1)異常概述異常捕獲語句拋出異常學習目標本講要點9.1異常概述初學Python會遇到各種報錯:有一種錯在程序執(zhí)行前由語法解析工具(如PyCharm)給出提示,如右圖所示。9.1異常概述什么是異常?還有一種錯誤是:語法正確,但在執(zhí)行過程中遇到程序的內(nèi)部邏輯錯誤,比如,試圖打開一個不存在的文件去讀取數(shù)據(jù),此時也會報錯。這種程序運行過程中出現(xiàn)的錯誤稱為異常。9.1異常概述什么是異常?程序運行出現(xiàn)異常時,若程序中沒有設(shè)置異常處理功能,解釋器會采用系統(tǒng)的默認方式處理異常,即返回異常信息、終止程序。異常信息中通常包含異常代碼所在行號、異常的類型和異常的描述信息。9.1.1認識異常Python程序運行出錯時產(chǎn)生的每個異常類型都對應一個類,大多數(shù)異常都繼承自Exception類,Exception類又繼承了異常類的基類BaseException。所有異常類型的父類內(nèi)置的、非系統(tǒng)退出的異常的基類Python解釋器退出異常9.1.2異常的類型1.NameErrorNameError是程序中使用了未定義的變量時會引發(fā)的異常。例如,訪問一個未聲明過的變量test,代碼如下:9.1.2異常的類型2.IndexErrorIndexError是程序越界訪問時會引發(fā)的異常。例如,使用索引0訪問空列表num_list,代碼如下:9.1.2異常的類型3. AttributeErrorAttributeError是使用對象訪問不存在的屬性時引發(fā)的異常。例如,Car類中動態(tài)地添加了兩個屬性color和brand,使用Car類的對象依次訪問color、brand屬性及不存在的name屬性,代碼如下:9.1.2異常的類型4. FileNotFoundErrorFileNotFoundError是未找到指定文件或目錄時引發(fā)的異常。例如,打開一個本地不存在的文件,代碼如下:9.1.2異常的類型9.2異常捕獲語句Python既可以直接通過try-except語句實現(xiàn)簡單的異常捕獲與處理的功能,也可以將try-except語句與else或finally子句組合實現(xiàn)更強大的異常捕獲與處理的功能。9.2異常捕獲語句try:

可能出錯的代碼except[異常類型[aserror]]:#將捕獲到的異常對象賦error

捕獲異常后的處理代碼語法格式try-except語句的語法格式如下:9.2.1 使用try-except語句捕獲異常try-except語句可以捕獲與處理程序的單個、多個或全部異常。num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結(jié)果為",num_one/num_two)except

ZeroDivisionError:print("出錯了")捕獲單個異常單個異常類型9.2.1 使用try-except語句捕獲異常num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結(jié)果為",num_one/num_two)exceptZeroDivisionErroraserror:print("出錯了,原因:",error)說明異常原因9.2.1 使用try-except語句捕獲異常出錯了,原因是:divisionbyzerotry-except語句可以捕獲與處理程序的單個、多個或全部異常。num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結(jié)果為",num_one/num_two)except

(ZeroDivisionError,ValueError)aserror:print("出錯了,原因:",error)捕獲多個異常多個異常類型9.2.1 使用try-except語句捕獲異常出錯了,原因是:divisionbyzerotry-except語句可以捕獲與處理程序的單個、多個或全部異常。num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結(jié)果為",num_one/num_two)except

Exception

aserror:#except:

print("出錯了,原因:",error)捕獲全部異常異常類型設(shè)置為Exception或省略不寫9.2.1 使用try-except語句捕獲異常出錯了,原因是:divisionbyzerotry:

可能出錯的代碼except[異常類型[aserror]]:#將捕獲到的異常對象賦值error

捕獲異常后的處理代碼else:

未捕獲異常后的處理代碼語法格式else子句可以與try-except語句組合成try-except-else結(jié)構(gòu),若try監(jiān)控的代碼沒有異常,程序會執(zhí)行else子句后的代碼。9.2.2 異常結(jié)構(gòu)中的else子句else子句可以與try-except語句組合成try-except-else結(jié)構(gòu),若try監(jiān)控的代碼沒有異常,程序會執(zhí)行else子句后的代碼。first_num=int(input("請輸入被除數(shù):"))second_num=int(input("請輸入除數(shù):"))try:

res=first_num/second_numexceptZeroDivisionErroraserror:print('異常原因:',error)else:print(res)else子句示例9.2.2 異常結(jié)構(gòu)中的else子句try:

可能出錯的代碼except[異常類型[aserror]]:#將捕獲到的異常對象賦值error

捕獲異常后的處理代碼finally:

一定執(zhí)行的代碼語法格式finally子句可以和try-except一起使用,語法格式如下:9.2.3 異常結(jié)構(gòu)中的finally子句無論try子句監(jiān)控的代碼是否產(chǎn)生異常,finally子句都會被執(zhí)行finally子句多用于預設(shè)資源的清理操作,如關(guān)閉文件、關(guān)閉網(wǎng)絡(luò)連接try:file=open('./file.txt',mode='r',encoding='utf-8')print(file.read())except(FileNotFoundError,UnicodeDecodeError)aserror:print(error)finally:file.close()print('文件已關(guān)閉')finally子句示例9.2.3 異常結(jié)構(gòu)中的finally子句9.3拋出異常Python程序中的異常不僅可以自動觸發(fā)異常,而且還可以由開發(fā)人員使用raise和assert語句主動拋出異常。9.3拋出異常使用raise語句可以顯式地拋出異常,raise語句的語法格式如下:raise異常類

#格式1:使用異常類名引發(fā)指定的異常raise異常類對象 #格式2:使用異常類的對象引發(fā)指定的異常raise

#格式3:使用剛出現(xiàn)過的異常重新引發(fā)異常raise語法格式raiseIndexError

示例:raise異常類9.3.1使用raise語句拋出異常使用異常類raise異常類 #格式1:使用異常類名引發(fā)指定的異常raise異常類對象

#格式2:使用異常類的對象引發(fā)指定的異常raise #格式3:使用剛出現(xiàn)過的異常重新引發(fā)異常raise語法格式raiseIndexError() #raiseIndexError('主動拋出的異常')示例:raise異常對象創(chuàng)建異常類對象9.3.1使用raise語句拋出異常raise異常類

#格式1:使用異常類名引發(fā)指定的異常raise異常類對象

#格式2:使用異常類的對象引發(fā)指定的異常raise

#格式3:使用剛出現(xiàn)過的異常重新引發(fā)異常raise語法格式raiseIndexError('索引下標超出范圍')示例:raise異常對象指定異常的具體信息9.3.1使用raise語句拋出異常raise異常類 #格式1:使用異常類名引發(fā)指定的異常raise異常類對象

#格式2:使用異常類的對象引發(fā)指定的異常raise

#格式3:使用剛出現(xiàn)過的異常重新引發(fā)異常raise語法格式try:raiseIndexErrorexcept:

raise示例:重新引發(fā)異常9.3.1使用raise語句拋出異常assert語句又稱為斷言語句,其語法格式如下所示:assert表達式[,異常信息]assert語法格式num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))assertnum_two!=0,'除數(shù)不能為0'#assert語句判定num_two不等于0result=num_one/num_twoprint(num_one,'/',num_two,'=',result)示例9.3.2使用assert語句拋出異常#表達式為False時,拋出異常9.3.2使用assert語句拋出異常如果程序中的異常沒有被處理,默認情況下會將該異常傳遞到上一級,如果上一級仍然沒有處理異常,那么會繼續(xù)向上傳遞,直至異常被處理或程序崩潰。9.3.3異常的傳遞小結(jié)第9講異常(2)自定義異常知識回顧本講要點9.4自定義異常有時我們需要自定義異常類,以滿足當前程序的需求。自定義異常的方法比較簡單,只需要創(chuàng)建一個繼承Exception類或Exception子類的類(類名一般以“Error”為結(jié)尾)即可。9.4自定義異常classShortInputError(Exception):'''自定義異常類'''def__init__(self,length,atleast):self.length=length #輸入的密碼長度

self.atleast=atleast #限制的密碼長度try:text=input("請輸入密碼:")iflen(text)<3:raiseShortInputError(len(text),3)exceptS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論