




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
異常處理系統(tǒng)異常處理預(yù)案異常捕獲異常處理拋出異常提?系統(tǒng)健壯性·增強(qiáng)程序可靠性·保護(hù)數(shù)據(jù)完整性項(xiàng)目八《Python語言程序設(shè)計(jì)》任務(wù)?標(biāo)知識(shí)?標(biāo)①掌握常?的異常②掌握捕獲與處理異常的語法結(jié)構(gòu)③掌握拋出異常的語法結(jié)構(gòu)能??標(biāo)①學(xué)會(huì)處理異常的?法和步驟②能夠根據(jù)實(shí)際需求選擇捕獲與處理異常的?法③能夠根據(jù)實(shí)際需求靈活拋出異常為什么需要異常處理提?系統(tǒng)健壯性異常處理使程序更加健壯,能夠更好地應(yīng)對(duì)各種異常情況。在軟件項(xiàng)?開發(fā)中,系統(tǒng)的健壯性是軟件質(zhì)量的重要衡量指標(biāo)。應(yīng)對(duì)意外情況當(dāng)程序運(yùn)?遇到意外情況(如空指針引?、數(shù)組越界、?件不存在等)時(shí),適當(dāng)?shù)漠惓L幚砜梢圆东@并處理這些異常,使程序能夠繼續(xù)正常運(yùn)?。?便調(diào)試和排除故障異常處理可以?便調(diào)試和排除故障,提?代碼的可維護(hù)性。通過捕獲和記錄異常,開發(fā)?員可以更快地定位和解決問題。保護(hù)程序安全性異常處理可以保護(hù)程序的安全性和數(shù)據(jù)完整性,降低代碼的維護(hù)成本,避免程序因?yàn)楫惓?暴露敏感信息或造成數(shù)據(jù)丟失及損壞。
合理的異常處理是構(gòu)建?質(zhì)量、可靠軟件系統(tǒng)的關(guān)鍵要素程序錯(cuò)誤類型語法錯(cuò)誤(SyntaxError)指那些因?yàn)椴环险Z法規(guī)則?產(chǎn)?的錯(cuò)誤。在Python中,常?的語法錯(cuò)誤有標(biāo)識(shí)符命名錯(cuò)誤、不正確的縮進(jìn)等。這類錯(cuò)誤通常在編輯或編譯時(shí)就會(huì)被檢測出來,如果存在這類錯(cuò)誤,程序?般都不會(huì)運(yùn)?。ifx=5:#應(yīng)該使?==?不是=運(yùn)?時(shí)錯(cuò)誤(RuntimeError)指在編寫時(shí)沒有錯(cuò)誤,但在程序運(yùn)?過程中產(chǎn)?錯(cuò)誤。例如除數(shù)為0、列表索引越界、數(shù)據(jù)類型不匹配等。?旦出現(xiàn)這類錯(cuò)誤,系統(tǒng)就會(huì)中?程序運(yùn)?,然后拋出異常。result=10/0#除數(shù)為0錯(cuò)誤邏輯錯(cuò)誤(LogicError)指編程思路出現(xiàn)了問題。雖然在程序運(yùn)?的過程中并沒有報(bào)錯(cuò),但程序運(yùn)?結(jié)果與預(yù)期結(jié)果不?致。例如運(yùn)算符使?不合理、語句次序不正確、循環(huán)語句的初始值和終值設(shè)置不正確等。total=0;foriinrange(11):total+=i#如果本意是計(jì)算1到10,這?錯(cuò)誤地從0開始什么是異常當(dāng)Python檢測到?個(gè)錯(cuò)誤時(shí),解釋器就會(huì)指出當(dāng)前流已?法繼續(xù)執(zhí)?下去,這時(shí)候就出現(xiàn)了異常。
異常是指程序因?yàn)槌鲥e(cuò)?在正??刂屏饕酝獠扇〉?為。異常是?個(gè)事件,該事件會(huì)在程序執(zhí)?過程中發(fā)?,影響程序的正常執(zhí)?。異常的兩個(gè)階段第?階段檢測異常并進(jìn)?處理使?異常處理結(jié)構(gòu)(如try...except)捕獲異常,
并根據(jù)異常類型執(zhí)?相應(yīng)的處理代碼,使程序能夠繼續(xù)執(zhí)?第?階段錯(cuò)誤引發(fā)異常程序執(zhí)?過程中遇到錯(cuò)誤(如除數(shù)為0、索引越界等),Python解釋器檢測到錯(cuò)誤并創(chuàng)建相應(yīng)的異常對(duì)象
理解異常處理機(jī)制可以提?系統(tǒng)健壯性,保障程序正常運(yùn)?常?異常類Python中常?的異常類及其含義AttributeError對(duì)象屬性錯(cuò)誤BaseException所有異常的?類Exception常規(guī)錯(cuò)誤?類ImportError導(dǎo)?模塊/對(duì)象失敗IndentationError縮進(jìn)錯(cuò)誤IndexError索引錯(cuò)誤IOError輸?/輸出操作失敗NameError對(duì)象命名錯(cuò)誤SyntaxError語法錯(cuò)誤TypeError類型?效錯(cuò)誤ValueError?效的參數(shù)ZeroDivisionError除(或取模)零異常捕獲結(jié)構(gòu)(一)try...except基本概念try...except是Python中最基本的異常捕獲結(jié)構(gòu),?于捕獲程序在運(yùn)?過程中產(chǎn)?的錯(cuò)誤,防?程序因異常?中斷執(zhí)?。語法結(jié)構(gòu)實(shí)例演?執(zhí)?流程執(zhí)?try塊中的代碼如果發(fā)?異常跳轉(zhuǎn)到匹配的except塊執(zhí)?異常處理代碼try:#可能產(chǎn)?異常的代碼statement_1statement_2except
ExceptionType:#異常處理代碼exception_handlertry:x=int(input("請(qǐng)輸??個(gè)數(shù)字:"))result=100/xprint(f"100除以{x}的結(jié)果是{result}")except
ValueError:print("輸?錯(cuò)誤:請(qǐng)輸??個(gè)有效的數(shù)字")except
ZeroDivisionError:print("錯(cuò)誤:不能除以零")異常捕獲結(jié)構(gòu)(二)try...except...else結(jié)構(gòu)說明try...except...else結(jié)構(gòu)是try...except的擴(kuò)展,增加了else?句:當(dāng)try塊中沒有異常發(fā)?時(shí),執(zhí)?else塊當(dāng)try塊中發(fā)?異常時(shí),執(zhí)?匹配的except塊,不執(zhí)?else塊else塊適合放置那些需要在?異常情況下執(zhí)?的代碼使?場景明確區(qū)分正常執(zhí)?路徑和異常處理路徑在確認(rèn)操作成功后執(zhí)?后續(xù)步驟提?代碼的可讀性,讓邏輯結(jié)構(gòu)更清晰try:result=10/x#嘗試除法運(yùn)算exceptZeroDivisionError:print("除數(shù)不能為零")#處理異常else:print(f"結(jié)果是:{result}")#?異常時(shí)執(zhí)?try塊嘗試執(zhí)?代碼是except塊處理異常否有異常?else塊?異常時(shí)執(zhí)?異常捕獲結(jié)構(gòu)(三)try...except...else...?nally完整的異常捕獲結(jié)構(gòu)?nally?句的特點(diǎn)?論是否發(fā)?異常,?nally塊中的代碼總會(huì)被執(zhí)?常?于釋放資源,如關(guān)閉?件、關(guān)閉數(shù)據(jù)庫連接等確保關(guān)鍵的清理代碼不會(huì)被跳過,提?程序的健壯性代碼?例try:file=open("example.txt","r")content=file.read()print(content)exceptFileNotFoundError:print("?件不存在")else:print("?件讀取成功")finally:print("?論如何都會(huì)執(zhí)?這段代碼")
if'file'inlocals():file.close()print("?件已關(guān)閉")執(zhí)?流程說明try:嘗試執(zhí)?的代碼塊except:發(fā)?異常時(shí)執(zhí)?的代碼塊else:沒有異常時(shí)執(zhí)?的代碼塊?nally:?論是否發(fā)?異常都會(huì)執(zhí)?的代碼塊1.
執(zhí)?try塊中的代碼2.
如果發(fā)?異常,執(zhí)?對(duì)應(yīng)的except塊3.
如果沒有異常,執(zhí)?else塊4.
?論是否有異常,最后都會(huì)執(zhí)??nally塊捕獲多個(gè)異常為什么需要捕獲多個(gè)異常實(shí)際開發(fā)中,同?段代碼可能會(huì)拋出多種異常,并且需要針對(duì)不同的異常類型進(jìn)?處理。關(guān)鍵要點(diǎn)通過添加相應(yīng)的except?句來實(shí)現(xiàn)多種異常捕獲?個(gè)except?句捕獲?個(gè)異常類型?旦某個(gè)except?句捕獲到了異常,其他的except?句將不會(huì)再嘗試捕獲異常異常捕獲順序很重要:從具體到?般代碼?例try:number=int(input("請(qǐng)輸??個(gè)數(shù)字:"))result=100/numberprint(f"結(jié)果是:{result}")
exceptValueError:
#處理輸?不是數(shù)字的情況print("輸?必須是數(shù)字!")
exceptZeroDivisionError:
#處理除數(shù)為零的情況print("除數(shù)不能為零!")
exceptExceptionase:
#處理其他所有異常print(f"發(fā)?錯(cuò)誤:{e}")最佳實(shí)踐按照從最具體到最?般的順序排列異常處理,避免更?般的異常處理阻?特定異常的捕獲。上下?管理器與with語句上下?管理器是什么?上下?管理器是Python2.5開始?持的?種語法,?于規(guī)定某個(gè)對(duì)象的使?范圍,?旦進(jìn)?或者離開使?范圍,會(huì)有特殊的操作被調(diào)?。__enter__(self)?法進(jìn)?上下?管理器時(shí)調(diào)?此?法其返回值被放?with...as語句的as說明符指定的變量中__exit__(self,type,value,tb)?法離開上下?管理器時(shí)調(diào)?此?法如有異常,type,value,tb分別為異常的類型、值和追蹤信息如?異常,3個(gè)參數(shù)均為None返回True/False指?異常是否得到處理with語句的應(yīng)?with語句適?于對(duì)資源進(jìn)?訪問的場合,確保不管使?過程中是否產(chǎn)?異常都會(huì)執(zhí)?必要的"清理"操作,釋放資源。withopen('file.txt','r')asf:content=f.read()
#?件會(huì)?動(dòng)關(guān)閉,即使發(fā)?異常with語句的優(yōu)勢?動(dòng)處理異常情況確保資源正確釋放簡化代碼結(jié)構(gòu)減少資源泄漏?險(xiǎn)拋出異常根據(jù)應(yīng)?程序特有的業(yè)務(wù)需求主動(dòng)拋出異常在開發(fā)中,除了代碼執(zhí)?出錯(cuò)Python解釋器會(huì)拋出異常,還可以根據(jù)應(yīng)?程序特有的業(yè)務(wù)需求主動(dòng)拋出異常。Python提供了?個(gè)Exception異常類,可以?于創(chuàng)建?定義異常。1創(chuàng)建Exception對(duì)象創(chuàng)建?個(gè)Exception類的實(shí)例,可以包含?定義錯(cuò)誤信息2使?raise關(guān)鍵字使?raise關(guān)鍵字拋出創(chuàng)建的異常對(duì)象,中斷程序執(zhí)?流程業(yè)務(wù)邏輯判斷創(chuàng)建Exception對(duì)象使?raise拋出def
validate_age(age):
ifage<0:
exception=Exception("年齡不能為負(fù)數(shù)")#創(chuàng)建Exception對(duì)象
raiseexception
#使?raise關(guān)鍵字拋出異常
elifage>150:
raiseException("年齡超出正常范圍")#創(chuàng)建并拋出異常的簡寫形式
return
f"年齡驗(yàn)證通過:{age}歲"
代碼?例異常處理?例:除數(shù)為0當(dāng)程序執(zhí)?除法運(yùn)算時(shí),如果除數(shù)為0,Python會(huì)拋出ZeroDivisionError異常。這是?種常?的運(yùn)?時(shí)錯(cuò)誤,如不處理會(huì)導(dǎo)致程序崩潰。問題代碼
ZeroDivisionError:divisionbyzero程序中斷執(zhí)?,后續(xù)代碼不會(huì)運(yùn)?異常處理解決?案
輸出:錯(cuò)誤:除數(shù)不能為0程序繼續(xù)執(zhí)?,不會(huì)中斷關(guān)鍵要點(diǎn)使?try-except結(jié)構(gòu)捕獲ZeroDivisionError異常在except代碼塊中提供適當(dāng)?shù)腻e(cuò)誤處理邏輯這種處理?式提?了程序的健壯性,防?程序意外終?Pythondef
calculate_result(a,b):
#嘗試進(jìn)?除法運(yùn)算result=a/b
returnresult#調(diào)?函數(shù)x=10y=0print(calculate_result(x,y))#錯(cuò)誤發(fā)?!Pythondef
calculate_result_safe(a,b):
try:result=a/b
returnresult
exceptZeroDivisionError:
return
"錯(cuò)誤:除數(shù)不能為0"#調(diào)?安全版函數(shù)x=10y=0print(calculate_result_safe(x,y))異常處理?例:列表索引越界代碼?例異常分析問題原因當(dāng)嘗試訪問超出列表?度范圍的索引時(shí),Python會(huì)拋出
IndexError異常。索引?效時(shí),程序會(huì)中斷執(zhí)?,導(dǎo)致后續(xù)代碼?法運(yùn)?。處理?法使?
try-except結(jié)構(gòu)捕獲IndexError異常提供友好的錯(cuò)誤信息??程序崩潰返回默認(rèn)值或采取其他恢復(fù)措施def
access_list_element(list_data,index):try:value=list_data[index]print(f"成功訪問索引{index},值為:{value}")returnvalueexcept
IndexError:print(f"錯(cuò)誤:索引{index}超出列表范圍")return
None
#列表定義和函數(shù)調(diào)?my_list=[10,20,30,40,50]
#正常索引訪問result1=access_list_element(my_list,2)#成功
#越界索引訪問result2=access_list_element(my_list,10)#異常處理異常處理?例:?件操作錯(cuò)誤try:
#嘗試打開?個(gè)可能不存在的?件file=open("user_data.txt","r")
#讀取?件內(nèi)容data=file.read()file.close()
#處理?件數(shù)據(jù)
print("?件內(nèi)容讀取成功!")except
IOError
ase:
#捕獲并處理輸?/輸出錯(cuò)誤
print(f"?件操作錯(cuò)誤:{e}")
#創(chuàng)建?個(gè)新?件作為替代?案
print("創(chuàng)建新的數(shù)據(jù)?件...")file=open("user_data.txt","w")file.write("默認(rèn)數(shù)據(jù)內(nèi)容")file.close()finally:
#確保資源被正確釋放
print("?件操作完成")IOError異常解析當(dāng)?件不存在、權(quán)限不?或磁盤空間不?等情況下,Python會(huì)拋出IOError異常
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科四急救考試試題及答案
- 陜西單招考試試題及答案
- 多模式出行行為分析-洞察與解讀
- 滕州面試語文真題及答案
- 2025安順鎮(zhèn)寧中考試卷真題及答案
- 類烏齊縣2025年中考數(shù)學(xué)考試模擬沖刺卷含解析
- 跨界融合體驗(yàn)設(shè)計(jì)-第1篇-洞察與解讀
- 鹽城美術(shù)招聘真題及答案
- 央美附中數(shù)學(xué)試題及答案
- 2025德格消防考試題及答案大全
- 漣源2022年事業(yè)編招聘考試《公共基礎(chǔ)知識(shí)》真題及答案解析【可復(fù)制版】
- GB/T 18851.4-2005無損檢測滲透檢測第4部分:設(shè)備
- GB/T 17553.1-1998識(shí)別卡無觸點(diǎn)集成電路卡第1部分:物理特性
- 2023年西藏山南雅礱天然飲品有限公司招聘筆試模擬試題及答案解析
- 海南礦產(chǎn)資源概況
- 幻影桌面云管理平臺(tái)實(shí)踐指導(dǎo)手冊(cè)
- 滬教牛津版英語4A M3U1 In our school:animal school優(yōu)質(zhì)課課件
- (通用版)水利安全員考試試題庫及答案
- 編版一年級(jí)下冊(cè) 《荷葉圓圓》2022年小學(xué)語文作業(yè)設(shè)計(jì)
- 施工現(xiàn)場安全檢查記錄表(周)以及詳細(xì)記錄
- 汽車配件購銷合同集合
評(píng)論
0/150
提交評(píng)論