版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、10 異常處理第10章 異常處理本章內(nèi)容異常處理概述PYTHON的異常類異常處理機制拋出異常斷言與上下文管理自定義異常Python的異常處理機制使得程序運行時出現(xiàn)的問題以統(tǒng)一的方式進行處理,增加了程序的穩(wěn)定性和可讀性,規(guī)范了程序的設(shè)計風格,提高了程序質(zhì)量。10.1 異常處理概述異常的概念異常(Exception)就是程序在運行過程中發(fā)生的,由于硬件故障、軟件設(shè)計錯誤、運行環(huán)境不滿足等原因?qū)е碌某绦蝈e誤。比如網(wǎng)絡(luò)中斷、文件找不到等代碼運行時如果發(fā)生了異常,將生成代表該異常的一個對象,并交由Python解釋器尋找相應的代碼來處理這一異常。Python異常處理優(yōu)點異常處理代碼和正常執(zhí)行的程序代碼分離
2、多個異常統(tǒng)一處理,具有靈活性可以從try-except之間的代碼段中快速定位異常出現(xiàn)的位置10.1 異常處理概述 異常示例1 # ex1001.pyweekday=Mon,Tues,Weds, ,Thurs,Fri,Sat,Sun3 print(weekday2)4 print(weekday7)try:weekday=Mon,Tues,Wed,Thurs,Fri,Satur,Sun print(weekday2) print(weekday7)except IndexError: print(列表索引可能超出范圍)10.2 Python的異常類Python中所有的異常類都是Exception
3、的子類。1. NameError嘗試訪問一個未聲明的變量,會引發(fā) NameError異常。2. ZeroDivisionError當除數(shù)為零的時候,會引發(fā)ZeroDivisionError異常。3. IndexError當引用序列中不存在的索引時,會引引發(fā)IndexError異常。4. KeyError當使用映射中不存在的鍵時,會引發(fā) Keyerror異常。10.2 Python的異常類Python中所有的異常類都是Exception的子類。5. AttributeError當嘗試訪問未知的對象屬性時,會引發(fā)AttributeError異常。6. SyntaxError當解釋器發(fā)現(xiàn)語法錯誤時,
4、會引發(fā)SyntaxError異常。7. FileNotFoundError試圖打開不存在的文件時,會引發(fā)FileNotFoundError異常。10.3 異常處理機制(1)程序執(zhí)行過程中如果出現(xiàn)異常,會自動生成一個異常對象,該異常對象被提交給Python解釋器,這個過程稱為拋出異常。拋出異常也可以由用戶程序自行定義。(2)當Python解釋器接收到異常對象時,會尋找處理這一異常的代碼并處理,這一過程叫捕獲異常。(3)如果Python解釋器找不到可以處理異常的方法,則運行時系統(tǒng)終止,應用程序退出。10.3 異常處理機制try-except語句用于處理異常,幫助用戶準確定位異常發(fā)生的位置和原因。格
5、式如下。try:語句塊except ExceptionName1:異常處理代碼1except ExceptionName2:異常處理代碼210.3 異常處理機制try-except語句(1)try語句指定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中,可能會生成異常對象并拋出。(2)except語句每個try代碼塊必須有一個或多個except語句,用于處理try代碼塊中所生成的異常。except語句后的參數(shù)指明它能夠捕獲的異常類型。except塊中包含的是異常處理的代碼。例10-3 基本的異常處理示例。10.3 異常處理機制else語句和finally語句完整的異常處理結(jié)構(gòu)還可以包
6、括else語句和finally語句。try:語句塊except ExceptionName:異常處理代碼 # except可以有多條語句else: 無異常發(fā)生時的語句塊finally: 必須處理的語句塊10.3 異常處理機制else語句和finally語句1. else語句與循環(huán)中的else語句類似,當try語句沒有捕獲到任何異常信息,將不執(zhí)行except語句塊,而是執(zhí)行else語句塊。2. finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常,finally塊中的語句都會被執(zhí)行。例10-4 els
7、e語句示例。例10-5 finally語句示例。10.3 異常處理機制捕獲所有的異常為了解決程序中會可能存在多處錯誤情況,可以在except語句中不指明異常型,這樣它就可以處理任何類型的異常。異常處理可以不斷細化。例8-6 通過except語句捕獲所有的異常。在except語句后使用Exception類。由于Exception類是所有異常類的父類,因此可以捕獲所有的異常。定義一個Exception的對象result(任意合法的標識符)用于接收異常處理對象,從而輸出異常信息。因為程序已經(jīng)捕獲了異常信息,并不會再出現(xiàn)因為異常而退出的情況。例8-7 使用Exception類的對象捕獲所有的異常。10
8、.3 異常處理機制捕獲所有的異常10.4 拋出異常在 Python中,除了程序運行出現(xiàn)錯誤時會引發(fā)異常外,也可以使用raise語句主動拋出異常,拋主要的應用場景是用戶自定義異常。raise語句使用 raise語句能顯示地拋出異常,基本格式如下。raise異常類 #拋出異常,并隱式地創(chuàng)建類對象raise異常類對象 #拋出異常,創(chuàng)建異常類的實例對象raise #重新拋出剛剛發(fā)生的異常10.4 拋出異常1. 使用類名引發(fā)異常 當 raise語句指定異常的類名時,會創(chuàng)建該類的實例對象,然后引發(fā)異常。2. 使用異常類的實例引發(fā)異常 通過顯式地創(chuàng)建異常類的實例,直接使用該實例對象來引發(fā)異常。3. 傳遞異常
9、 不帶任何參數(shù)的raise語句,可以再次引發(fā)剛剛發(fā)生過的異常,作用就是向外傳遞異常。4.指定異常的描述信息 當使用raise語句拋出異常時,還可以給異常類指定描述信息。10.4 拋出異常拋出異常示例用戶的應用程序中也可以拋出異常,但需要生成異常對象。生成異常對象一般都是通過raise語句實現(xiàn)的。例10-9擬現(xiàn)金支付功能,當支付額度大于5000時,拋出ValueError異常,當額度低于5000時,按照額度的10%扣稅。10.5 斷言與上下文管理兩種特殊的異常處理方式,在形式上比異常處理結(jié)構(gòu)簡單,能夠滿足簡單的異常處理和條件確認,并且可以和標準的異常處理結(jié)構(gòu)結(jié)合使用。斷言assert語句又稱作斷
10、言語句,指的是用戶期望滿足指定的條件。當用戶定義的約束條件不滿足的時候,它會觸發(fā)AssertionError異常。assert邏輯表達式,description在上面格式中,assert后面是一個邏輯表達式,相當于條件。description是可選的,通常是一個字符串。 flag=True assert flag=False,flag初始值錯誤10.5 斷言與上下文管理上下文管理使用上下文管理語句with可以自動管理資源,代碼塊執(zhí)行完后,自動還原進入該代碼塊之前的現(xiàn)場或上下文。不論何種原因跳出with塊,也不論是否發(fā)生異常,總能保證資源被正確釋放,簡化了工作。多用于打開文件、連接網(wǎng)絡(luò)、連接數(shù)據(jù)
11、庫等場合。with 表達式 as variable: with語句塊10.5 斷言與上下文管理上下文管理例如,下面的代碼在文件操作時使用with上下文管理語句,當文件處理完以后,將會自動關(guān)閉。fname=d:pythonfile36aaaa.txtwith open(fname) as file: for line in file: print(line,end=)10.6 自定義異常應用場景某個應用所特有的運行錯誤,需要編程人員根據(jù)程序的邏輯在用戶程序中創(chuàng)建用戶自定義的異常類和異常對象。用來處理程序中可能產(chǎn)生的邏輯錯誤,使得這種錯誤能夠被系統(tǒng)及時識別并處理,而不致擴散產(chǎn)生更大的影響,從而使用
12、戶程序更為強健,有更好的容錯性能,并使整個系統(tǒng)更加安全穩(wěn)定。創(chuàng)建用戶自定義異常需要完成如下的工作。 (1)聲明一個新的異常類,使之以Exception類或其他某個已經(jīng)存在的系統(tǒng)異常類或用戶異常類為父類。 (2)為新的異常類定義屬性和方法,或重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該類所對應的錯誤的信息。8.6 自定義異常應用場景某個應用所特有的運行錯誤,需要編程人員根據(jù)程序的邏輯在用戶程序中創(chuàng)建用戶自定義的異常類和異常對象。用來處理程序中可能產(chǎn)生的邏輯錯誤,使得這種錯誤能夠被系統(tǒng)及時識別并處理,而不致擴散產(chǎn)生更大的影響,從而使用戶程序更為強健,有更好的容錯性能,并使整個系統(tǒng)更加安全穩(wěn)定。
13、創(chuàng)建用戶自定義異常需要完成如下的工作。 (1)聲明一個新的異常類,使之以Exception類或其他某個已經(jīng)存在的系統(tǒng)異常類或用戶異常類為父類。 (2)為新的異常類定義屬性和方法,或重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該類所對應的錯誤的信息。10.6 自定義異常例10-11個用戶自定義異常的示例。代碼包括3部分第1部分是關(guān)于異常類的定義,該類繼承了Exception類,第2部分代碼是自定義異常的業(yè)務邏輯,模擬當支取金額大于500時,報告異常;第3部分是測試代碼。小結(jié)異常(Exception)就是程序在運行過程中發(fā)生的,由于硬件故障、軟件設(shè)計錯誤、運行環(huán)境不滿足等原因?qū)е碌某绦蝈e誤事件。Python中所有的異常類都是Exception的子類。Python常用的內(nèi)置異常類包括NameError、ZeroDivisionError、IndexError、KeyError、AttributeError、SyntaxError、FileNotFoundError等。Python通過try-excep-else-finally語句處理異常,幫助用戶準確定位異常發(fā)生的位置和原因。小結(jié)通過在except語句中不指明異常型來處理任何類型的異常,為了能區(qū)分來自不同語句的異常,在except語句后使用Exception類,并定義一個Exception的對象用于接收異常處理對象,從而輸出異常
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓班積分禮品管理制度
- 少兒培訓機構(gòu)退費制度
- 培訓班員工薪酬制度
- 統(tǒng)計分析與培訓管理制度
- 教師專業(yè)發(fā)展培訓制度
- 南陽企業(yè)培訓制度
- 農(nóng)機培訓學校制度
- 培訓班教室安全管理制度
- 門診科室培訓制度
- 培訓積分兌換制度
- 地坪漆施工方案范本
- 2025寧波市甬北糧食收儲有限公司公開招聘工作人員2人筆試參考題庫及答案解析
- 2026年國有企業(yè)金華市軌道交通控股集團招聘備考題庫有答案詳解
- 港口安全生產(chǎn)管理模版
- 產(chǎn)房與兒科交接登記表
- 2022-2023學年四川省宜賓市高一(下)期末數(shù)學試卷(含解析)
- 教你填《廣東省普通高中學生檔案》精編版
- 韓國語topik單詞-初級+中級
- 克林頓1993年就職演講+(中英文)
- 商業(yè)倫理與會計職業(yè)道德(第四版)第五章企業(yè)對外經(jīng)營道德規(guī)范
- DB13 5161-2020 鍋爐大氣污染物排放標準
評論
0/150
提交評論