Python基礎(chǔ)教程 課件 項目十 Python異常處理_第1頁
Python基礎(chǔ)教程 課件 項目十 Python異常處理_第2頁
Python基礎(chǔ)教程 課件 項目十 Python異常處理_第3頁
Python基礎(chǔ)教程 課件 項目十 Python異常處理_第4頁
Python基礎(chǔ)教程 課件 項目十 Python異常處理_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目十Python異常處理任務(wù)10.2任務(wù)10.3CONTENTS目錄異常處理拋出異常任務(wù)10.4任務(wù)10.1Python語言中的異常自定義異常任務(wù)10.1Python語言中的異常程序在執(zhí)行過程中,由于本身編寫問題或外界環(huán)境改變而引發(fā)的錯誤稱為異常。引發(fā)異常的原因有很多,如下標(biāo)越界、文件不存在、網(wǎng)絡(luò)異常、數(shù)據(jù)類型錯誤等。示例代碼如下:10.1.1異常的概念>>>5+"3"Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>5+"3"TypeError:unsupportedoperandtype(s)for+:′int′and′str′>>>10/0Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>10/0ZeroDivisionError:divisionbyzero當(dāng)嘗試訪問未知的對象屬性時,會引發(fā)AttributeError(嘗試訪問未知的對象屬性)異常。示例代碼如下:10.1.2常見的異常classAnimal():name=′tiger′animal=Animal()print(animal.name)print(animal.color)1.AttributeError異常Animal類沒有定義color屬性,在創(chuàng)建Animal類的實例后,訪問它的color屬性時,會出現(xiàn)AttributeError異常,如圖10-1所示。10.1.2常見的異常1.AttributeError異常圖10-1

AttributeError異常當(dāng)嘗試以只讀方式打開一個不存在的文件時,會引發(fā)FileNotFoundError(找不到文件,Python3.2以前是IOError)異常。示例代碼如下:10.1.2常見的異常file=open(′111.txt′)2.FileNotFoundError異常在本示例中,使用open()函數(shù)打開名為“111.txt”的文件,當(dāng)該文件不存在時,會出現(xiàn)FileNotFoundError異常,如圖10-2所示。圖10-2

FileNotFoundError異常Python解釋器是通過代碼塊的縮進來判斷代碼之間的邏輯關(guān)系的。當(dāng)縮進錯誤時,會引發(fā)IndentationError(縮進錯誤)異常。示例代碼如下:10.1.2常見的異常list_1=[1,2,3,4]foriinlist_1:print(i)3.IndentationError異常由于for循環(huán)語句塊沒有縮進,因此導(dǎo)致程序出現(xiàn)IndentationError異常,如圖10-3所示。圖10-3

IndentationError異常當(dāng)使用序列中不存在的索引時,會引發(fā)IndexError(索引超出序列的范圍)異常。示例代碼如下:10.1.2常見的異常list_1=[1,2,3,4,5]print(list_1[5])4.IndexError異常由于list_1列表中沒有索引為5的元素,因此當(dāng)使用索引5訪問列表元素時,程序出現(xiàn)IndexError異常,如圖10-4所示。圖10-4

IndexError異常當(dāng)使用字典中不存在的“鍵”時,會引發(fā)KeyError(字典中查找一個不存在的關(guān)鍵字)異常。示例代碼如下:10.1.2常見的異常dict_1={′one′:1,′two′:2,′three′:3}print(dict_1[′one′])print(dict_1[′three′])print(dict_1[′four′])5.KeyError異常由于字典中只有“one”“two”和“three”3個鍵,因此當(dāng)獲取“four”鍵對應(yīng)的值時,程序出現(xiàn)KeyError異常,如圖10-5所示。10.1.2常見的異常圖10-5

KeyError異常當(dāng)嘗試訪問一個未聲明的變量時,會引發(fā)NameError(嘗試訪問一個不存在的變量)異常。示例代碼如下:10.1.2常見的異常a=1c=a+bprint(c)6.NameError異常當(dāng)執(zhí)行程序時,由于Python解釋器在任何命名空間中都沒有找到變量b,因此導(dǎo)致程序出現(xiàn)NameError異常,如圖10-6所示。圖10-6

NameError異常當(dāng)Python解釋器發(fā)現(xiàn)語法錯誤時,會引發(fā)SyntaxError異常。示例代碼如下:10.1.2常見的異常list_1=["a","b","c","d","e"]foriinlist_1print(i)7.SyntaxError異常由于for循環(huán)的后面缺少冒號,因此導(dǎo)致程序出現(xiàn)SyntaxError異常,如圖10-7所示。圖10-7

SyntaxError異常當(dāng)將不同類型的數(shù)據(jù)進行運算操作時,有時會引發(fā)TypeError(不同類型間的無效操作)異常。示例代碼如下:10.1.2常見的異常birth=input(′birth:′)ifbirth<2000:print("00前")else:print("00后")8.TypeError異常10.1.2常見的異常8.TypeError異常input()函數(shù)返回的數(shù)據(jù)類型是字符串。由于字符串類型數(shù)據(jù)不能直接與數(shù)字類型數(shù)據(jù)進行比較,因此導(dǎo)致程序出現(xiàn)TypeError異常,如圖10-8所示。圖10-8

TypeError異常10.1.2常見的異常9.ValueError異常當(dāng)傳給函數(shù)的參數(shù)類型不正確時,會引發(fā)ValueError(傳入無效參數(shù))異常。示例代碼如下:圖10-9

ValueError異常importmathmath.sqrt(-10)由于int()函數(shù)傳入了無效的字符串類型參數(shù),因此導(dǎo)致程序出現(xiàn)ValueError異常,如圖10-9所示。10.1.2常見的異常10.ZeroDivisionError異常當(dāng)除數(shù)為零時,會引發(fā)ZeroDivisionError(除數(shù)為零)異常。示例代碼如下:圖10-10

ZeroDivisionError異常a=100/0print(a)由于零不能作為除數(shù),因此導(dǎo)致程序出現(xiàn)ZeroDivisionError異常,如圖10-10所示。10.1.3Python語言中的其他異常表10-1

Python語言中的其他異常異常名稱描述BaseException所有異常的基類ArithmeticError所有數(shù)值計算錯誤的基類AssertionError斷言語句失敗DeprecationWarning關(guān)于被棄用的特征的警告EnvironmentError操作系統(tǒng)錯誤的基類EOFError沒有內(nèi)建輸入,到達EOF標(biāo)記任務(wù)10.2異常處理1.捕獲簡單異常捕獲簡單異常的語法格式如下:try:#可能引發(fā)異常語句塊exceptException:#異常處理語句塊10.2.1try...except語句

其中,try語句塊中包含可能引發(fā)異常的語句;except中的語句塊用于捕獲相應(yīng)的異常;Exception為異常類的名稱。2.捕獲多個異常

捕獲多個異常的結(jié)構(gòu)類似于多分支選擇結(jié)構(gòu),一旦try語句塊中的語句拋出異常,就按順序依次檢測并與except語句塊匹配。如果某個except語句塊捕獲到了異常,則其他except語句塊將不再捕獲異常。捕獲多個異常的語法格式如下:try:#可能引發(fā)異常的語句塊exceptException_1:#異常處理語句塊1exceptException_2:#異常處理語句塊2exceptException_3:#異常處理語句塊3...10.2.1try...except語句3.捕獲所有異常捕獲所有異常的語法格式如下:try:#可能引發(fā)異常語句塊except:#異常處理語句塊10.2.1try...except語句【例10-3】捕獲所有的異常。程序代碼如右:print("捕獲兩個數(shù)相除的異常\n")try:number_1=float(input(′請輸入被除數(shù):′))number_2=float(input(′請輸入除數(shù):′))number_3=number_1/number_2print(′兩個數(shù)相除,商為:′,number_3)except:print("****************************")print(′出現(xiàn)異常!′)4.捕獲異常的信息描述10.2.1try...except語句【例10-4】捕獲異常的信息描述。程序代碼如下:print("捕獲兩個數(shù)相除的異常\n")try:number_1=float(input(′請輸入被除數(shù):′))number_2=float(input(′請輸入除數(shù):′))number_3=number_1/number_2print(′兩個數(shù)相除,商為:′,number_3)exceptExceptionasresult:print("****************************")print("捕獲到異常:%s"%result)10.2.2try...except...else語句

try...except...else語句還有一個可選的else語句塊,如果要使用該語句塊,則必須將其放在except語句塊之后。在try語句塊中的語句沒有發(fā)生任何異常時,將執(zhí)行該語句塊。try...except...else的語法格式如下:try:#可能引發(fā)異常語句塊exceptException[asresult]:#異常處理語句塊else:#如果try語句塊中的語句沒有引發(fā)異常,則執(zhí)行該語句塊10.2.3try...except...finally語句

在程序執(zhí)行過程中,有一種情況是,無論是否捕獲到異常,程序都要執(zhí)行終止行為(如關(guān)閉文件),這時可以使用finally語句塊進行處理。通常情況下,finally語句塊用于釋放資源。try...except...finally的語法格式如下:try:#可能引發(fā)異常的語句塊exceptException[asresult]:#異常處理語句塊finally:#無論try語句塊中的語句是否引發(fā)異常,都會執(zhí)行該語句塊任務(wù)10.3拋出異常格式1和格式2是對等的,都會引發(fā)指定異常類對象。格式1可以隱式地創(chuàng)建異常類的實例對象;格式2是最常見的,會直接提供一個異常類的實例對象;格式3用于重新引發(fā)剛發(fā)生的異常。raise異常類

#格式1,引發(fā)異常時會隱式地創(chuàng)建異常類對象raise異常類對象 #格式2,引發(fā)異常類對象對應(yīng)的異常raise

#格式3,重新引發(fā)剛發(fā)生的異常10.3.1raise語句使用raise語句能顯式地觸發(fā)異常,其語法格式如下:示例代碼如下:raise異常名稱10.3.1raise語句使用異常名引發(fā)異常,是指當(dāng)raise語句指定異常名時,會創(chuàng)建該類的實例對象,然后引發(fā)異常,其語法格式如下:1.使用異常名引發(fā)異常>>>raiseNameErrorTraceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseNameErrorNameError直接使用該實例對象能引發(fā)異常,同時還能給異常類指定描述信息。示例代碼如下:raise異常名稱(異常描述)10.3.1raise語句使用異常類的實例引發(fā)異常的語法格式如下:2.使用異常類的實例引發(fā)異常>>>raiseIndexError("索引下標(biāo)超出范圍")Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseIndexError("索引下標(biāo)超出范圍")IndexError:索引下標(biāo)超出范圍10.3.1raise語句如果捕獲到異常,而又想重新引發(fā)它(傳遞異常),則可以使用不帶參數(shù)的raise語句。示例代碼如下:3.傳遞異常>>>try:...raiseIndexError("索引下標(biāo)超出范圍")...exceptIndexError:...print("程序出現(xiàn)了異常!")...raise...程序出現(xiàn)了異常!Traceback(mostrecentcalllast):File"<pyshell#1>",line2,in<module>raiseIndexError("索引下標(biāo)超出范圍")IndexError:索引下標(biāo)超出范圍10.3.2assert語句assert語句又稱為斷言,是一種用于調(diào)試的語句,它可以用于檢測程序執(zhí)行時是否滿足一些前提條件。如果不滿足,則會拋出一個AssertionError異常。assert語句的語法格式如下:assertexpression[,arguments]其中,expression是一個邏輯表達式,如果為False,則會拋出AssertionError異常;arguments是一個可選項,用于指定異常的錯誤信息。當(dāng)assert語句被執(zhí)行時,如果expression為False,則會拋出AssertionError異常,并將arguments作為異常信息輸出。任務(wù)10.4自定義異?!纠?0-9】自定義異常的應(yīng)用。用戶注冊賬戶時,輸入的性別只能是“男”或“女”,要求自定義異

溫馨提示

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

評論

0/150

提交評論