《Python程序設計任務驅動教程》 課件-第10章 異常_第1頁
《Python程序設計任務驅動教程》 課件-第10章 異常_第2頁
《Python程序設計任務驅動教程》 課件-第10章 異常_第3頁
《Python程序設計任務驅動教程》 課件-第10章 異常_第4頁
《Python程序設計任務驅動教程》 課件-第10章 異常_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章異?!禤ython程序設計任務驅動教程》學習目標/Target

了解錯誤和異常,能夠說出什么是錯誤和異常

熟悉異常的類型,能夠理解常見異常的含義

掌握try-except語句的使用,能夠通過try-except語句捕獲程序中的異常

掌握try-except-else語句的使用,能夠在else子句中添加沒有異常的處理代碼學習目標/Target

掌握try-except-finally語句的使用,能夠在finally子句中添加釋放資源的代碼

掌握raise語句的使用,能夠在程序中通過raise語句拋出異常

掌握assert斷言語句的使用,能夠在程序中通過assert語句拋出異常

掌握自定義異常的方法,能夠在程序中自定義并使用異常章節(jié)概述/Summary程序無論是在編寫的過程中,還是在后續(xù)的運行時,都可能出現(xiàn)異常。開發(fā)人員需要辨別程序的異常,明確這些異常是源于程序本身的設計問題,還是由外界環(huán)境的變化引起的,以便有針對性地處理異常。為幫助開發(fā)人員便捷地處理異常,Python提供了功能強大的異常處理機制。接下來,本章將通過2個任務對Python中的異常進行講解。目錄/Contents任務10-1反詐查詢系統(tǒng)任務10-2模擬網(wǎng)上商城反詐查詢系統(tǒng)任務10-1任務描述反詐查詢舉報判斷用戶查詢的手機號碼或網(wǎng)址是否在文件中,若存在于文件中,則提示用戶查詢的手機號碼或網(wǎng)址被標記的次數(shù)。將用戶舉報的內(nèi)容記錄到文件中,若舉報的內(nèi)容已存在,則將標記次數(shù)加1,反之則將舉報內(nèi)容添加到文件中,并設置標記次數(shù)為1。任務描述本任務要求根據(jù)上述描述,編寫一個提供反詐查詢和舉報功能的反詐查詢系統(tǒng),系統(tǒng)中用于查詢的可疑手機號或網(wǎng)址文件都存儲在info.txt文件中?!救蝿漳繕恕恐R儲備了解錯誤和異常,能夠說出什么是錯誤和異常學習目標1.錯誤和異常概述知識儲備1.錯誤和異常概述解析錯誤是指開發(fā)人員編寫了不符合規(guī)范的語法格式引起的錯誤,它會在編寫代碼時由編輯器會進行提示。即使使用了正確的語法格式編寫代碼,在執(zhí)行代碼時仍可能出現(xiàn)錯誤。程序執(zhí)行時檢測到的錯誤稱為異常。知識儲備1.錯誤和異常概述whileTrueprint("語法格式錯誤")解析錯誤示例循環(huán)條件的后面缺少冒號print(1/0)異常示例0不能作為除數(shù)進行計算知識儲備熟悉異常的類型,能夠理解常見異常的含義學習目標2.異常類型知識儲備2.異常類型Python解釋器退出異常用戶中斷執(zhí)行時產(chǎn)生的異常內(nèi)置的、非系統(tǒng)退出的異常的基類生成器退出異常知識儲備2.異常類型(1)NameErrorNameError是程序中使用了未定義的變量時會引發(fā)的異常。print(name)(2)IndexErrorIndexError是程序越界訪問時引發(fā)的異常。list_data=[1,2,3,4]print(list_data[5])知識儲備2.異常類型(3)AttributeErrorAttributeError是使用對象訪問不存在的屬性引發(fā)的異常。classDog:passdog=Dog()print()(4)FileNotFoundErrorFileNotFoundError是未找到指定文件或目錄時引發(fā)的異常。file=open("test.txt")Dog類沒有定義name屬性本地沒有test.txt文件知識儲備掌握try-except語句的使用,能夠通過try-except語句捕獲程序中的異常學習目標3.try-except語句知識儲備3.try-except語句try:

可能出錯的代碼except[異常類[as異常信息]]:

捕獲異常后的處理代碼語法格式執(zhí)行過程執(zhí)行try子句中可能出錯的代碼若try子句中沒有產(chǎn)生異常,跳過except子句的代碼若產(chǎn)生異常,跳過try子句中出錯行及之后的代碼,執(zhí)行except子句的代碼321知識儲備3.try-except語句(1)捕獲單個異常捕獲單個異常的方式比較簡單,只需要在except之后指定捕獲的單個異常類即可。num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結果為:",num_one/num_two)exceptZeroDivisionError:print("出錯了")我們可以在異常類之后使用關鍵字as來獲取異常的具體信息。num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))try:print("結果為",num_one/num_two)exceptZeroDivisionErroraserror:print("出錯了,原因:",error)知識儲備3.try-except語句(2)捕獲多個異常捕獲多個異常的方式也比較簡單,只需要在except之后以元組形式指定多個異常類。try:num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))print("結果為",num_one/num_two)except(ZeroDivisionError,ValueError)aserror:print("出錯了,原因:",error)(3)捕獲全部異常如果要捕獲程序中所有的異常,那么可以將except之后的異常類設置為Exception或省略不寫。try:num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))print("結果為",num_one/num_two)exceptExceptionase:print("出錯了,原因:",repr(e))知識儲備掌握try-except-else語句的使用,能夠通過else子句處理沒有異常的情況學習目標4.try-except-else語句知識儲備4.try-except-else語句try:

可能出錯的代碼except[異常類[as異常信息]]:

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

沒有異常的處理代碼語法格式first_num=int(input("請輸入被除數(shù):"))second_num=int(input("請輸入除數(shù):"))try:result=first_num/second_numexceptZeroDivisionErroraserror:print('異常原因:',error)else:print(result)知識儲備掌握try-except-finally語句的使用,能夠通過finally子句釋放程序中的資源學習目標5.try-except-finally語句知識儲備5.try-except-finally語句try:

可能出錯的代碼except[異常類[as異常信息]]:

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

無論是否出錯都會執(zhí)行的代碼語法格式file=open('異常.txt','r')try:file.write("人生苦短,我用Python")exceptExceptionaserror:print("寫入文件失敗",error)finally:file.close()print('文件已關閉')任務分析反詐查詢系統(tǒng)共包含兩個功能:反詐查詢功能和舉報功能,我們可以將這兩個功能設計成2個函數(shù),分別是main()和search_report(),其中main()函數(shù)用于展示反詐查詢系統(tǒng)的功能;search_report()函數(shù)用于實現(xiàn)舉報或查詢用戶輸入的手機號碼或網(wǎng)址。實現(xiàn)思路任務分析1.

search_report()函數(shù)(1)search_report()函數(shù)接收3個參數(shù),分別是查詢或舉報的類型(手機號或網(wǎng)址)、查詢或舉報的數(shù)據(jù)、執(zhí)行反炸查詢邏輯或舉報邏輯的標識參數(shù)。(2)我們需要讀取info.txt文件中的數(shù)據(jù),并使用eval()函數(shù)將讀取的內(nèi)容轉換為Python中的字典類型。(3)因為search_report()函數(shù)接收用戶選擇的查詢/舉報類型(手機號或網(wǎng)址),所以我們可以根據(jù)傳入的查詢/舉報類型獲取字典中所有的手機號碼或網(wǎng)址。

實現(xiàn)思路任務分析2.

main()函數(shù)main()函數(shù)作為程序的入口,用于展示反詐查詢系統(tǒng)所包含的功能。當用戶選擇反詐查詢時,會提示用戶選擇“手機號查詢”或“網(wǎng)址查詢”,若用戶選擇“手機號查詢”,則調(diào)用search_report()函數(shù)時將查詢的類型和手機號碼和標識參數(shù)作為參數(shù)傳入到該函數(shù)中,若用戶選擇“網(wǎng)址查詢”,同樣會調(diào)用search_report()函數(shù)并將查詢的類型和網(wǎng)址標識參數(shù)作為參數(shù)傳入到該函數(shù)中;當用戶選擇舉報功能時,流程與執(zhí)行反詐查詢大致相同,不同之處在于標識參數(shù)的值不同。實現(xiàn)思路任務實現(xiàn)1.創(chuàng)建項目Chapter10及01_fraud_query.py文件。2.在01_fraud_query.py文件中編寫代碼。定義main()函數(shù),用于展示反炸查詢系統(tǒng)所包含的功能。定義search_report()函數(shù),用于查詢或舉報手機號或網(wǎng)址。調(diào)用main()函數(shù)啟動程序。3.運行01_fraud_query.py文件。實現(xiàn)步驟模擬網(wǎng)上商城任務10-2任務描述本任務要求編寫代碼,實現(xiàn)具有檢測商品數(shù)量是否符合規(guī)則的程序,具體要求如下。(1)顧客可以選購4件商品,分別是五常大米、五豐河粉、農(nóng)家大米、純香香油,它們的價格分別是45.0、29.9、45.0和22.9。(2)程序會一直等待用戶輸入商品名稱和商品數(shù)量,并對商品數(shù)量進行檢測。(3)用戶輸入q后,會輸出用戶選購的商品名稱、數(shù)量和總金額?!救蝿漳繕恕恐R儲備掌握raise語句的使用,能夠在程序中通過raise語句拋出異常學習目標1.raise語句知識儲備1.raise語句Python程序中的異常不僅可以自動觸發(fā),還可以由開發(fā)人員使用raise語句主動引發(fā)異常。raise異常類#格式1:使用異常類名引發(fā)指定的異常raise異常類對象 #格式2:使用異常類的對象引發(fā)指定的異常raise #格式3:使用剛出現(xiàn)過的異常重新引發(fā)異常語法格式第1種格式和第2種格式是對等的,都會引發(fā)指定類型的異常,其中第1種格式會隱式創(chuàng)建一個該異常類型的對象,第2種形式是最常見的,它會直接提供一個該異常類型的對象。第3種用于重新引發(fā)上下文中捕獲的異常,或默認引發(fā)RuntimeError異常。知識儲備1.raise語句(1)使用異常類名引發(fā)指定的異常raiseIndexError(2)使用異常類的對象引發(fā)指定的異常raiseIndexError()raiseIndexError('索引下標超出范圍') #引發(fā)異常及其具體信息隱式地創(chuàng)建IndexError類的實例顯式地創(chuàng)建IndexError類的實例知識儲備1.raise語句(3)使用上下文中捕獲的異常對象重新引發(fā)異常,或默認引發(fā)Runtime

Error異常try:raiseIndexError('索引下標超出范圍')except:raise再次引發(fā)剛剛發(fā)生的IndexError異常知識儲備掌握assert斷言語句的使用,能夠在程序中通過assert語句拋出異常學習目標2.assert斷言語句知識儲備2.assert斷言語句assert斷言語句用于判定一個表達式是否為真,如果表達式的值為True,不做任何操作,否則引發(fā)AssertionError異常。assert表達式[,異常信息]語法格式表達式后面的異常信息是可選項,它通常會通過字符串的形式說明引發(fā)異常的原因。知識儲備2.assert斷言語句num_one=int(input("請輸入被除數(shù):"))num_two=int(input("請輸入除數(shù):"))assertnum_two!=0,'除數(shù)不能為0'result=num_one/num_twoprint(num_one,'/',num_two,'=',result)示例如果保證代碼能夠正確執(zhí)行,那么可以不用在程序中使用assert斷言語句。知識儲備掌握自定義異常的方法,能夠在程序中使用自定義的異常學習目標3.自定義異常知識儲備3.自定義異常Python中定義了大量的異常類,雖然這些異常類可以描述編程時出現(xiàn)的絕大部分錯誤情況,但仍難以涵蓋所有可能出現(xiàn)的異常。Python允許開發(fā)人員自定義異常。知識儲備3.自定義異常txt_file.txt文件的內(nèi)容自定義異常的方式比較簡單,我們只需要定義一個表示異常的類,讓它繼承Exception類或其它異常類即可。自定義異常類與普通類一樣,也可以具有自己的屬性和方法,但一般情況下不添加或者只為其添加幾個用于描述異常的詳細信息的屬性即可。classCustomError(Exception):pass#pass表示空語句自定義異常try:raiseCustomError("出現(xiàn)錯誤")exceptCustomErroraserror:print(error)使用自定義異常知識儲備3.自定義異常txt_file.txt文件的內(nèi)容classFileTypeError(Exception):def__init__(self):self.err='僅支持jpg/png/bmp格式

溫馨提示

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

評論

0/150

提交評論