Python程序設(shè)計(jì)教程-10_異常處理_第1頁
Python程序設(shè)計(jì)教程-10_異常處理_第2頁
Python程序設(shè)計(jì)教程-10_異常處理_第3頁
Python程序設(shè)計(jì)教程-10_異常處理_第4頁
Python程序設(shè)計(jì)教程-10_異常處理_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、10 異常處理第10章 異常處理本章內(nèi)容異常處理概述PYTHON的異常類異常處理機(jī)制拋出異常斷言與上下文管理自定義異常Python的異常處理機(jī)制使得程序運(yùn)行時(shí)出現(xiàn)的問題以統(tǒng)一的方式進(jìn)行處理,增加了程序的穩(wěn)定性和可讀性,規(guī)范了程序的設(shè)計(jì)風(fēng)格,提高了程序質(zhì)量。10.1 異常處理概述異常的概念異常(Exception)就是程序在運(yùn)行過程中發(fā)生的,由于硬件故障、軟件設(shè)計(jì)錯(cuò)誤、運(yùn)行環(huán)境不滿足等原因?qū)е碌某绦蝈e(cuò)誤。比如網(wǎng)絡(luò)中斷、文件找不到等代碼運(yùn)行時(shí)如果發(fā)生了異常,將生成代表該異常的一個(gè)對(duì)象,并交由Python解釋器尋找相應(yīng)的代碼來處理這一異常。Python異常處理優(yōu)點(diǎn)異常處理代碼和正常執(zhí)行的程序代碼分離

2、多個(gè)異常統(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嘗試訪問一個(gè)未聲明的變量,會(huì)引發(fā) NameError異常。2. ZeroDivisionError當(dāng)除數(shù)為零的時(shí)候,會(huì)引發(fā)ZeroDivisionError異常。3. IndexError當(dāng)引用序列中不存在的索引時(shí),會(huì)引引發(fā)IndexError異常。4. KeyError當(dāng)使用映射中不存在的鍵時(shí),會(huì)引發(fā) Keyerror異常。10.2 Python的異常類Python中所有的異常類都是Exception的子類。5. AttributeError當(dāng)嘗試訪問未知的對(duì)象屬性時(shí),會(huì)引發(fā)AttributeError異常。6. SyntaxError當(dāng)解釋器發(fā)現(xiàn)語法錯(cuò)誤時(shí),

4、會(huì)引發(fā)SyntaxError異常。7. FileNotFoundError試圖打開不存在的文件時(shí),會(huì)引發(fā)FileNotFoundError異常。10.3 異常處理機(jī)制(1)程序執(zhí)行過程中如果出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常對(duì)象,該異常對(duì)象被提交給Python解釋器,這個(gè)過程稱為拋出異常。拋出異常也可以由用戶程序自行定義。(2)當(dāng)Python解釋器接收到異常對(duì)象時(shí),會(huì)尋找處理這一異常的代碼并處理,這一過程叫捕獲異常。(3)如果Python解釋器找不到可以處理異常的方法,則運(yùn)行時(shí)系統(tǒng)終止,應(yīng)用程序退出。10.3 異常處理機(jī)制try-except語句用于處理異常,幫助用戶準(zhǔn)確定位異常發(fā)生的位置和原因。格

5、式如下。try:語句塊except ExceptionName1:異常處理代碼1except ExceptionName2:異常處理代碼210.3 異常處理機(jī)制try-except語句(1)try語句指定捕獲異常的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中,可能會(huì)生成異常對(duì)象并拋出。(2)except語句每個(gè)try代碼塊必須有一個(gè)或多個(gè)except語句,用于處理try代碼塊中所生成的異常。except語句后的參數(shù)指明它能夠捕獲的異常類型。except塊中包含的是異常處理的代碼。例10-3 基本的異常處理示例。10.3 異常處理機(jī)制else語句和finally語句完整的異常處理結(jié)構(gòu)還可以包

6、括else語句和finally語句。try:語句塊except ExceptionName:異常處理代碼 # except可以有多條語句else: 無異常發(fā)生時(shí)的語句塊finally: 必須處理的語句塊10.3 異常處理機(jī)制else語句和finally語句1. else語句與循環(huán)中的else語句類似,當(dāng)try語句沒有捕獲到任何異常信息,將不執(zhí)行except語句塊,而是執(zhí)行else語句塊。2. finally語句為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常,finally塊中的語句都會(huì)被執(zhí)行。例10-4 els

7、e語句示例。例10-5 finally語句示例。10.3 異常處理機(jī)制捕獲所有的異常為了解決程序中會(huì)可能存在多處錯(cuò)誤情況,可以在except語句中不指明異常型,這樣它就可以處理任何類型的異常。異常處理可以不斷細(xì)化。例8-6 通過except語句捕獲所有的異常。在except語句后使用Exception類。由于Exception類是所有異常類的父類,因此可以捕獲所有的異常。定義一個(gè)Exception的對(duì)象result(任意合法的標(biāo)識(shí)符)用于接收異常處理對(duì)象,從而輸出異常信息。因?yàn)槌绦蛞呀?jīng)捕獲了異常信息,并不會(huì)再出現(xiàn)因?yàn)楫惓6顺龅那闆r。例8-7 使用Exception類的對(duì)象捕獲所有的異常。10

8、.3 異常處理機(jī)制捕獲所有的異常10.4 拋出異常在 Python中,除了程序運(yùn)行出現(xiàn)錯(cuò)誤時(shí)會(huì)引發(fā)異常外,也可以使用raise語句主動(dòng)拋出異常,拋主要的應(yīng)用場(chǎng)景是用戶自定義異常。raise語句使用 raise語句能顯示地拋出異常,基本格式如下。raise異常類 #拋出異常,并隱式地創(chuàng)建類對(duì)象raise異常類對(duì)象 #拋出異常,創(chuàng)建異常類的實(shí)例對(duì)象raise #重新拋出剛剛發(fā)生的異常10.4 拋出異常1. 使用類名引發(fā)異常 當(dāng) raise語句指定異常的類名時(shí),會(huì)創(chuàng)建該類的實(shí)例對(duì)象,然后引發(fā)異常。2. 使用異常類的實(shí)例引發(fā)異常 通過顯式地創(chuàng)建異常類的實(shí)例,直接使用該實(shí)例對(duì)象來引發(fā)異常。3. 傳遞異常

9、 不帶任何參數(shù)的raise語句,可以再次引發(fā)剛剛發(fā)生過的異常,作用就是向外傳遞異常。4.指定異常的描述信息 當(dāng)使用raise語句拋出異常時(shí),還可以給異常類指定描述信息。10.4 拋出異常拋出異常示例用戶的應(yīng)用程序中也可以拋出異常,但需要生成異常對(duì)象。生成異常對(duì)象一般都是通過raise語句實(shí)現(xiàn)的。例10-9擬現(xiàn)金支付功能,當(dāng)支付額度大于5000時(shí),拋出ValueError異常,當(dāng)額度低于5000時(shí),按照額度的10%扣稅。10.5 斷言與上下文管理兩種特殊的異常處理方式,在形式上比異常處理結(jié)構(gòu)簡(jiǎn)單,能夠滿足簡(jiǎn)單的異常處理和條件確認(rèn),并且可以和標(biāo)準(zhǔn)的異常處理結(jié)構(gòu)結(jié)合使用。斷言assert語句又稱作斷

10、言語句,指的是用戶期望滿足指定的條件。當(dāng)用戶定義的約束條件不滿足的時(shí)候,它會(huì)觸發(fā)AssertionError異常。assert邏輯表達(dá)式,description在上面格式中,assert后面是一個(gè)邏輯表達(dá)式,相當(dāng)于條件。description是可選的,通常是一個(gè)字符串。 flag=True assert flag=False,flag初始值錯(cuò)誤10.5 斷言與上下文管理上下文管理使用上下文管理語句with可以自動(dòng)管理資源,代碼塊執(zhí)行完后,自動(dòng)還原進(jìn)入該代碼塊之前的現(xiàn)場(chǎng)或上下文。不論何種原因跳出with塊,也不論是否發(fā)生異常,總能保證資源被正確釋放,簡(jiǎn)化了工作。多用于打開文件、連接網(wǎng)絡(luò)、連接數(shù)據(jù)

11、庫等場(chǎng)合。with 表達(dá)式 as variable: with語句塊10.5 斷言與上下文管理上下文管理例如,下面的代碼在文件操作時(shí)使用with上下文管理語句,當(dāng)文件處理完以后,將會(huì)自動(dòng)關(guān)閉。fname=d:pythonfile36aaaa.txtwith open(fname) as file: for line in file: print(line,end=)10.6 自定義異常應(yīng)用場(chǎng)景某個(gè)應(yīng)用所特有的運(yùn)行錯(cuò)誤,需要編程人員根據(jù)程序的邏輯在用戶程序中創(chuàng)建用戶自定義的異常類和異常對(duì)象。用來處理程序中可能產(chǎn)生的邏輯錯(cuò)誤,使得這種錯(cuò)誤能夠被系統(tǒng)及時(shí)識(shí)別并處理,而不致擴(kuò)散產(chǎn)生更大的影響,從而使用

12、戶程序更為強(qiáng)健,有更好的容錯(cuò)性能,并使整個(gè)系統(tǒng)更加安全穩(wěn)定。創(chuàng)建用戶自定義異常需要完成如下的工作。 (1)聲明一個(gè)新的異常類,使之以Exception類或其他某個(gè)已經(jīng)存在的系統(tǒng)異常類或用戶異常類為父類。 (2)為新的異常類定義屬性和方法,或重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該類所對(duì)應(yīng)的錯(cuò)誤的信息。8.6 自定義異常應(yīng)用場(chǎng)景某個(gè)應(yīng)用所特有的運(yùn)行錯(cuò)誤,需要編程人員根據(jù)程序的邏輯在用戶程序中創(chuàng)建用戶自定義的異常類和異常對(duì)象。用來處理程序中可能產(chǎn)生的邏輯錯(cuò)誤,使得這種錯(cuò)誤能夠被系統(tǒng)及時(shí)識(shí)別并處理,而不致擴(kuò)散產(chǎn)生更大的影響,從而使用戶程序更為強(qiáng)健,有更好的容錯(cuò)性能,并使整個(gè)系統(tǒng)更加安全穩(wěn)定。

13、創(chuàng)建用戶自定義異常需要完成如下的工作。 (1)聲明一個(gè)新的異常類,使之以Exception類或其他某個(gè)已經(jīng)存在的系統(tǒng)異常類或用戶異常類為父類。 (2)為新的異常類定義屬性和方法,或重載父類的屬性和方法,使這些屬性和方法能夠體現(xiàn)該類所對(duì)應(yīng)的錯(cuò)誤的信息。10.6 自定義異常例10-11個(gè)用戶自定義異常的示例。代碼包括3部分第1部分是關(guān)于異常類的定義,該類繼承了Exception類,第2部分代碼是自定義異常的業(yè)務(wù)邏輯,模擬當(dāng)支取金額大于500時(shí),報(bào)告異常;第3部分是測(cè)試代碼。小結(jié)異常(Exception)就是程序在運(yùn)行過程中發(fā)生的,由于硬件故障、軟件設(shè)計(jì)錯(cuò)誤、運(yùn)行環(huán)境不滿足等原因?qū)е碌某绦蝈e(cuò)誤事件。Python中所有的異常類都是Exception的子類。Python常用的內(nèi)置異常類包括NameError、ZeroDivisionError、IndexError、KeyError、AttributeError、SyntaxError、FileNotFoundError等。Python通過try-excep-else-finally語句處理異常,幫助用戶準(zhǔn)確定位異常發(fā)生的位置和原因。小結(jié)通過在except語句中不指明異常型來處理任何類型的異常,為了能區(qū)分來自不同語句的異常,在except語句后使用Exception類,并定義一個(gè)Exception的對(duì)象用于接收異常處理對(duì)象,從而輸出異常

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論