




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
異常處理1捕獲異常目錄異常的概念和類型2拋出異常3【任務4-7】尋找和為目標值的數(shù)字對4異常的概念若在運行過程中發(fā)生錯誤,程序的執(zhí)行將會被中斷,并創(chuàng)建異常對象。異常是程序在正常流程控制以外采取的動作,當它被引發(fā)時,計算機將自動尋找異常處理程序,以幫助程序恢復正常運行。要想保證程序正常運行,就需要排除錯誤,錯誤的出現(xiàn)可能是由語法導致的,也可能是由邏輯導致的。語法錯誤表明程序在結構上存在問題,可以在程序執(zhí)行前加以糾正。邏輯錯誤則可能是因為缺少輸入或輸入不正確,某些情況下,也可能是因為由輸入的內容無法生成預期的結果。一般情況下,邏輯錯誤是難以預防的,必須使用異常處理程序來應對。Python異常類型異常名說明異常名說明BaseException所有異常的基類RuntimeError一般的運行時異常Exception常規(guī)異常的基類NotImplementedError尚未實現(xiàn)的方法StandardError所有的內建標準異常的基類SyntaxError語法錯誤導致的異常ArithmeticError所有數(shù)值計算異常的基類IndentationError縮進錯誤導致的異常FloatingPointError浮點計算異常TabErrorTab和空格混用OverflowError數(shù)值運算超出最大限制SystemError一般的解釋器系統(tǒng)異常ZeroDivisionError除零異常TypeError對類型無效的操作AssertionError斷言語句失敗ValueError傳入無效的參數(shù)AttributeError對象不包含某個屬性UnicodeErrorUnicode相關的異常Python異常類型異常名說明異常名說明EOFError沒有讀取到文件結束標記(EOF,EndofFile)UnicodeDecodeErrorUnicode解碼錯誤導致的異常EnvironmentError操作系統(tǒng)異常的基類UnicodeEncodeErrorUnicode編碼錯誤導致的異常IOErrorI/O(Input/Output,輸入輸出)操作失敗UnicodeTranslateErrorUnicode轉換錯誤導致的異常OSError操作系統(tǒng)異常Warning警告的基類WindowsError系統(tǒng)調用失敗DeprecationWarning關于被棄用特征的警告ImportError導入模塊/對象失敗FutureWarning關于構造將來語義會有改變的警告KeyboardInterrupt用戶中斷執(zhí)行UserWarning用戶代碼生成的警告LookupError無效數(shù)據(jù)查詢的基類PendingDeprecationWarning關于特性將會被廢棄的警告Python異常類型異常名說明異常名說明IndexError序列中沒有此索引RuntimeWarning可疑的運行時行為(runtimebehavior)的警告KeyError映射中沒有對應鍵SyntaxWarning可疑的語法的警告MemoryError內存溢出異常ImportWarning導入模塊過程中觸發(fā)的警告NameError未聲明/初始化對象UnicodeWarning與Unicode相關的警告UnboundLocalError訪問未初始化的本地變量BytesWarning與字節(jié)或字節(jié)碼相關的警告ReferenceError弱引用試圖訪問已被回收的對象ResourceWarning與資源使用相關的警告異常的類型計算機語言針對可能出現(xiàn)的錯誤定義了異常類型,當某種錯誤引發(fā)了對應的異常時,異常處理程序將會被啟動,從而恢復程序的正常運行。Python異常類型大致分為數(shù)值計算錯誤、操作系統(tǒng)錯誤、無效數(shù)據(jù)查詢、Unicode相關的錯誤和警告等幾類。異常體系內部還存在著層次關系,較低層次、更具細節(jié)的異常是某些高層次異常的子類,這些高層次異常被稱為基類,子類和基類是相對的。Python異常體系中的部分關系如下圖。1捕獲異常目錄異常的概念和類型2拋出異常3【任務4-7】尋找和為目標值的數(shù)字對4異常的處理在Python中普遍使用try語句處理異常,該語句一般包括try、except、else、finally4個部分,可以組成try-except-else、try-except、try-except-finally的形式。try部分包含嘗試執(zhí)行的代碼塊,except部分是特定異常的處理對策,else部分在程序運行正常時執(zhí)行,而finally部分則無論try部分是否產生異常都會執(zhí)行。處理異常的try語句可以被視為一種條件分支。與if語句的區(qū)別在于,try語句并不包含布爾表達式,執(zhí)行的流向也不取決于布爾表達式,它依賴于代碼塊能否執(zhí)行,其內在邏輯和運行流程與if語句相似,符合條件分支的特征。try:操作語句1except錯誤類型1aserror:操作語句2except錯誤類型2aserror:操作語句3else:操作語句4try-except-else語句try-except-else語句的基本語法格式如右。當執(zhí)行try-except-else語句時,程序首先執(zhí)行try代碼塊,即可能出錯的試探性語句,從而試探該代碼塊是否會出現(xiàn)錯誤而導致程序無法繼續(xù)執(zhí)行。如果try代碼塊確實無法執(zhí)行,那么可能會執(zhí)行某個except代碼塊。執(zhí)行except代碼塊的條件是,系統(tǒng)捕獲的異常類型和該代碼塊標識的類型相符。如果try代碼塊正常執(zhí)行,則會接著執(zhí)行else代碼塊。>>>number=0>>>#以變量number作除數(shù),嘗試運行除法操作>>>try:...print('1.0/number=',1.0/number)...exceptZeroDivisionError:#如果異常是ZeroDivisionError,輸出提示信息...print('***除數(shù)為0***')***除數(shù)為0***try-except語句在try語句中,except與else代碼塊都是可選的,except代碼塊可以有0個或多個,else代碼塊可以有0個或1個。當try語句中沒有else代碼塊時,就構成try-except語句,示例代碼如下。如上代碼中,由于0不能作為除數(shù),因此引發(fā)了除零異常,但由于except代碼塊給出了ZeroDivisionError的解決方案,因此將會執(zhí)行except代碼塊中的內容,程序得以完整地運行。Python異常層次差異>>>dict1={'a':1,'b':2,'v':22}>>>#嘗試查詢dict1中不存在的鍵值對>>>try:...x=dict1['y']...exceptLookupError:...print('查詢錯誤')...exceptKeyError:...print('鍵錯誤')...else:...print(x)查詢錯誤如下代碼的try-except-else語句嘗試查詢在字典中不存在的鍵值對時引發(fā)了異常。程序優(yōu)先執(zhí)行exceptLookupError代碼塊,導致出現(xiàn)了非真正錯誤原因的提示。因此,使用多個except代碼塊時,必須堅持規(guī)范排序,要保證從最具針對性的異常到最通用的異常依次排序。>>>#調換LookupError和KeyError處理代碼塊的順序>>>dict2={'a':1,'b':2,'v':22}>>>#嘗試查詢dict2中不存在的鍵值對>>>try:...x=dict2['y']...exceptKeyError:...print('鍵錯誤')...exceptLookupError:...print('查詢錯誤')...else:...print(x)鍵錯誤try:
操作語句1except錯誤類型1aserror:
操作語句2except錯誤類型2aserror:
操作語句3finally:
操作語句4try-except-finally語句try-except-finally語句的基本語法格式如下。無論是否發(fā)生異常,finally代碼塊都會執(zhí)行,因此其常用于釋放資源,如關閉文件、網絡連接,以及釋放內存等。使用finally關閉文件>>>try:...file=open('航天新聞.txt','r')...content=file.read()...print(content)...#這里可能會發(fā)生異常,例如文件不存在...exceptFileNotFoundError:...#捕獲FileNotFoundError異常...print("文件未找到,請檢查文件路徑。")...exceptExceptionase:...#捕獲其他所有異常...print(f"發(fā)生了未知的異常:{e}")...finally:...#清理塊中的代碼...iffile:...file.close()...print("文件已關閉。")使用finally關閉文件,如右代碼。1捕獲異常目錄異常的概念和類型2拋出異常3【任務4-7】尋找和為目標值的數(shù)字對4>>>try:...num=0...ifnum==0:...raiseValueError("不能除以0。")...result=num/2...print(result)...exceptValueErrorase:...#捕獲ValueError異常...print(f"值錯誤:{e}")值錯誤:不能除以0。raise語句除自然發(fā)生的異常外,在Python中還可以使用raise語句和assert語句主動拋出異常。使用raise語句拋出異常時,只需在raise后輸入異常名即可,如右代碼。如右代碼可知,當num等于0時,可以使用raise語句手動拋出一個ValueError異常。>>>try:...num=0...assertnum!=0,"不能除以0。"...result=num/2...print(result)...exceptAssertionErrorase:...#捕獲AssertionError異常...print(f"斷言錯誤:{e}")斷言錯誤:不能除以0。assert語句assert語句又稱為斷言語句,用于檢查一個表達式的值是否為Ture。當表達式的值為False時,拋出AssertionError異常;當表達式的值為True時,將不做任何操作。assert語句的基本語法格式如下。如上代碼可知,可以使用assert語句來斷言num不等于0。當num等于0時,assert語句會拋出一個AssertionError異常。1捕獲異常目錄異常的概念和類型2拋出異常3【任務4-7】尋找和為目標值的數(shù)字對4【任務4-7】尋找和為目標值的數(shù)字對任務分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 肉類加工中的低溫加工技術研究考核試卷
- 肉類副產品在營養(yǎng)強化食品中的應用研究考核試卷
- 磷肥生產技術基礎考核試卷
- 軟件測試工具應用試題及答案回顧
- 計算機三級嵌入式課程體系設計試題及答案
- 深入理解行政組織理論的試題及答案
- 精心準備公路工程執(zhí)照考試的試題及答案
- 賓館房間裝修管理制度
- 學校家長宿舍管理制度
- 客運企業(yè)衛(wèi)生管理制度
- 小學新課標《義務教育數(shù)學課程標準(2022年版)》新修訂解讀課件
- 七年級下學期語文5月月考試卷
- 2024年樂山市市級事業(yè)單位選調工作人員真題
- 社區(qū)衛(wèi)生服務與試題及答案
- 補單合同范本10篇
- 汕頭市潮陽區(qū)潮邑供水有限公司招聘真題2024
- 心血管-腎臟-代謝綜合征患者的綜合管理中國專家共識2025解讀-2
- 2025年北京市海淀區(qū)高三二模地理試卷(含答案)
- 護工技能大賽試題及答案
- 機械制造自動化技術工業(yè)機器人
- 貨物居間協(xié)議合同協(xié)議
評論
0/150
提交評論