版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
異常處理Python程序設(shè)計項目化教程目錄異常捕獲主動拋出異常用戶自定義異常Python提供了兩個非常重要的功能來處理python程序在運行中出現(xiàn)的異常和錯誤。可以使用該功能來調(diào)試python程序。
異常處理:語法錯誤和異常
斷言(Assertions):用于判斷一個表達式,在表達式條件為false的時候觸發(fā)異常。應(yīng)用示例:把一個字符串轉(zhuǎn)換成整型數(shù)。int("Hello!")輸出結(jié)果:ValueErrorTraceback(mostrecentcalllast)~\AppData\Local\Temp\ipykernel_12112\2236278069.pyin<module>---->1int("Hello!")上述示例中就拋出了一個異常,主要是字符串不利用int()轉(zhuǎn)換成整型數(shù)。1)捕捉異??梢允褂胻ry/except語句。Python中的異常處理機制使用try/except塊來捕獲和處理異常。try/except塊的一般形式如下:異常捕獲try:#代碼塊exceptExceptionType:#異常處理代碼塊try的工作原理是,當開始一個try語句后,python就在當前程序的上下文中作標記,這樣當異常出現(xiàn)時就可以回到這里,try子句先執(zhí)行,接下來會發(fā)生什么依賴于執(zhí)行時是否出現(xiàn)異常。如果當try后的語句執(zhí)行時發(fā)生異常,python就跳回到try并執(zhí)行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發(fā)新的異常)。異常捕獲如果在try子句執(zhí)行時沒有發(fā)生異常,python將執(zhí)行else語句后的語句(如果有else的話),然后控制流通過整個try語句。當執(zhí)行try塊時,如果發(fā)生了類型為ExceptionType的異常,Python解釋器會跳過try塊的其余代碼,轉(zhuǎn)而執(zhí)行對應(yīng)的except塊的代碼。ExceptionType可以是任何異常的基類,或者是具體的異常類型。如果未指定ExceptionType,則所有類型的異常都會被捕獲。異常捕獲示例:創(chuàng)建一個基于身高和體重計算BMI的函數(shù)。先定義一個評價BMI的函數(shù),再定義一個main()函數(shù),提示用戶輸入身高和體重,打印最終的BMI。main()函數(shù)使用try...except...else語句控制流程,如果輸入的身高或體重不是數(shù)字,將會產(chǎn)生ValueError異常。如果沒有產(chǎn)生異常,將會執(zhí)行else分支,計算BMI指數(shù)并評級該結(jié)果。。異常捕獲defcalculate_bmi(height,weight):"""calculatebodymassindex(BMI)"""returnweight/height**2defevaluate_bmi(bmi):"""evaluatethebmi"""if18.5<=bmi<=24.9:return'healthy'ifbmi>=25:return'overweight'return'underweight'defmain():try:height=float(input('Enteryourheight(meters):'))weight=float(input('Enteryourweight(kilograms):'))exceptValueErroraserror:print(error)else:bmi=round(calculate_bmi(height,weight),1)evaluation=evaluate_bmi(bmi)print(f'Yourbodymassindexis{bmi}')print(f'Thisisconsidered{evaluation}!')main()ValueError:invalidliteralforint()withbase10:'Hello!'異常捕獲2)捕捉異??梢允褂胻ry…except…else…finally語句Python中可以使用try/except/else/finally塊來捕捉和處理異常以及執(zhí)行異常之外的代碼和收尾操作。具體語法如下:異常捕獲try:#嘗試運行的語句(可能會發(fā)生異常,也可能不會發(fā)生異常)
<語句>except(異常類型1,異常類型2,...):#如果發(fā)生異常類型1時的操作
<語句>else:#如果沒有發(fā)生異常的操作(可選)
<語句>finally:#不管有沒有發(fā)生異常都會執(zhí)行的操作
<語句>try塊中包含可能引發(fā)異常的代碼,如果在執(zhí)行try塊中的代碼時出現(xiàn)了異常,Python將跳過try塊中剩余的代碼,并執(zhí)行相應(yīng)的except塊中的代碼。else塊包含發(fā)生任何異常時要執(zhí)行的代碼,而finally塊中包含無論是否發(fā)生異常都要執(zhí)行的代碼。異常捕獲try:num1=int(input("Enterthefirstnumber:"))num2=int(input("Enterthesecondnumber:"))result=num1/num2exceptZeroDivisionError:print("Error:Cannotdividebyzero")exceptValueError:print("Error:Invalidinput")else:print(f"Theresultis{result}")finally:print("Programexecutioncomplete.")異常捕獲示例中,將用戶輸入的兩個整數(shù)相除并打印結(jié)果。如果用戶輸入的第二個數(shù)字是零或無法轉(zhuǎn)換為整數(shù),則會引發(fā)異常,并在相應(yīng)的except塊中處理異常。如果沒有引發(fā)任何異常,則會在else塊中打印結(jié)果。無論發(fā)生了什么,都會在finally塊中打印"Programexecutioncomplete."。需要注意的是,使用try/except/else/finally塊時,需要確保finally塊中的代碼始終都會被執(zhí)行,無論是否出現(xiàn)異常。異常捕獲Python中可以使用raise語句在程序中主動拋出異常,使程序進入異常狀態(tài)。raise語句的基本語法格式為:raise[exceptionName[(reason)]]其中,exceptionName和reason為均可選參數(shù),前者的作用是指定拋出的異常名稱,后者為異常信息的相關(guān)描述。 如果可選參數(shù)全部省略,則raise會把當前錯誤原樣拋出 如果僅省略(reason),則在拋出異常時,將不附帶任何的異常描述信息也就是說,raise語句有如下三種常用的用法:
raise:單獨一個raise。該語句引發(fā)當前上下文中捕獲的異常(比如在except塊中),或默認引發(fā)RuntimeError異常。
raiseexceptionName:raise后帶一個異常類名稱,表示引發(fā)執(zhí)行類型的異常。raiseexceptionName(reason):在引發(fā)指定類型的異常的同時,附帶異常的描述信息。主動拋出異常try:num=input("請輸入一個數(shù)字:")ifnotnum.isdigit():raiseelse:print(f"輸入為:{num}")exceptRuntimeErrorase:print(f"異常[{e}]觸發(fā)")#不指定except需捕獲的異常try:num=input("請輸入一個數(shù)字:")ifnotnum.isdigit():raiseelse:print(f"輸入為:{num}")except:print(f"異常觸發(fā)")#但這樣我們就不知道具體是什么異常發(fā)生了!"""
請輸入一個數(shù)字:leovin
異常觸發(fā)"""主動拋出異常在Python中,用戶可以通過繼承內(nèi)置的異常類或其他自定義的異常類來創(chuàng)建自己的異常類,從而實現(xiàn)自定義異常捕捉和處理。用戶自定義異常示例:示例:演示了如何創(chuàng)建一個自定義的異常類。classMyError(Exception):"""自定義異常類"""def__init__(self,message):self.message=message示例中,定義了一個名為MyError的自定義異常類,它繼承了內(nèi)置的Exception
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度虛擬現(xiàn)實設(shè)備研發(fā)與委托生產(chǎn)合同
- 2024年度機械設(shè)備買賣合同樣本
- 2024年度人力資源外包與招聘服務(wù)協(xié)議
- 2024年度物流園區(qū)建設(shè)與運營合同
- 2024年員工保密協(xié)議模板
- 2024年度自建房施工合同終止合同
- 2024年工程預(yù)付款資金監(jiān)管協(xié)議
- 2024出版社與作者之間的出版合同
- 2024年度企業(yè)文化建設(shè)合作協(xié)議
- 2024年建筑企業(yè)與監(jiān)理單位服務(wù)協(xié)議
- 中國女性生理健康白皮書
- 天然氣巡檢記錄表
- 甲苯磺酸瑞馬唑侖臨床應(yīng)用
- 民法典講座-繼承篇
- 外包施工單位入廠安全培訓(xùn)(通用)
- 糖尿病健康知識宣教課件
- 客戶接觸點管理課件
- Python語言學(xué)習通超星課后章節(jié)答案期末考試題庫2023年
- 醫(yī)學(xué)-心臟驟停急救培訓(xùn)-心臟驟停急救教學(xué)課件
- 高中英語-Book 1 Unit 4 Click for a friend教學(xué)課件設(shè)計
- 年產(chǎn)30萬噸碳酸鈣粉建設(shè)項目可行性研究報告
評論
0/150
提交評論