《Python語言程序設(shè)計(jì)》課件 項(xiàng)目8:異常處理-系統(tǒng)異常處理預(yù)案_第1頁
《Python語言程序設(shè)計(jì)》課件 項(xiàng)目8:異常處理-系統(tǒng)異常處理預(yù)案_第2頁
《Python語言程序設(shè)計(jì)》課件 項(xiàng)目8:異常處理-系統(tǒng)異常處理預(yù)案_第3頁
《Python語言程序設(shè)計(jì)》課件 項(xiàng)目8:異常處理-系統(tǒng)異常處理預(yù)案_第4頁
《Python語言程序設(shè)計(jì)》課件 項(xiàng)目8:異常處理-系統(tǒng)異常處理預(yù)案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論