版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Python編程基礎(chǔ)認(rèn)識(shí)異常3在Python語(yǔ)言中,即使程序的語(yǔ)法是正確的,在運(yùn)行時(shí)也有可能發(fā)生錯(cuò)誤,這種在運(yùn)行期間檢測(cè)到的錯(cuò)誤稱為異常。而異常產(chǎn)生的主要原因來(lái)自代碼執(zhí)行的環(huán)境。例如:讀取了一個(gè)不存在的文件;連接了一個(gè)停止運(yùn)行的遠(yuǎn)程服務(wù)器;錯(cuò)誤的用戶輸入等。大多數(shù)異常是不會(huì)被程序自動(dòng)處理的,會(huì)以錯(cuò)誤信息的形式進(jìn)行展現(xiàn),如果我們不進(jìn)行處理,此時(shí)程序就會(huì)中斷并退出。引入Python的異常分為兩種內(nèi)置異常,在某些錯(cuò)誤出現(xiàn)時(shí)會(huì)自動(dòng)觸發(fā)用戶自定義異常,是用戶根據(jù)自己的需求設(shè)置的異常認(rèn)識(shí)異常Python的常見(jiàn)的內(nèi)置異常如表所示。認(rèn)識(shí)異常內(nèi)置異常異常原因SyntaxError語(yǔ)法錯(cuò)誤IndentationError縮進(jìn)錯(cuò)誤IndexError索引超出序列的范圍TypeError不同類型的數(shù)據(jù)進(jìn)行運(yùn)算操作ZeroDivisionError除數(shù)為0NameError嘗試訪問(wèn)一個(gè)未聲明的變量ValueError傳給函數(shù)的參數(shù)類型不正確KeyError使用字典中不存在的鍵FileNotFoundError試圖以只讀模式打開(kāi)一個(gè)不存在的文件AttributeError嘗試訪問(wèn)未知的對(duì)象屬性大多數(shù)異常不會(huì)被程序自動(dòng)處理,會(huì)以異常信息的形式進(jìn)行顯示。例如,執(zhí)行x=1+"2"語(yǔ)句,出現(xiàn)的異常信息如圖所示。從圖中可以看出,該語(yǔ)句拋出了TypeError異常,如果沒(méi)有對(duì)該異常進(jìn)行處理,程序就會(huì)使用所謂的回溯(Traceback,一種異常信息)終止執(zhí)行,這些信息包括異常發(fā)生的行號(hào)、異常的名稱(如TypeError)和原因等。認(rèn)識(shí)異常感謝您的觀看Python編程基礎(chǔ)異常的捕捉和處理一、try-except二、try-except-else三、try-except-finally四、try-except-else-finallytry-except語(yǔ)句可以對(duì)代碼運(yùn)行過(guò)程中可能出現(xiàn)的異常進(jìn)行捕捉和處理。其最簡(jiǎn)單的語(yǔ)法格式如下:try:#可能會(huì)引發(fā)異常的代碼塊except[異常類型][as變量名(保存異常信息)]:#處理異常的代碼塊一、try-except1.捕獲單個(gè)異常例:捕獲兩數(shù)相除除數(shù)為0的異常。try:a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))c=a/bprint('商為:',c)exceptZeroDivisionError:print('除數(shù)不能為0!')程序運(yùn)行效果請(qǐng)輸入被除數(shù):aTraceback(mostrecentcalllast):File"D:/PycharmProjects/untitled/1.py",line2,in<module>a=float(input('請(qǐng)輸入被除數(shù):'))ValueError:couldnotconvertstringtofloat:'a'一、try-except2.捕捉多個(gè)異常處理多個(gè)異常的try-except語(yǔ)句,第一種可以針對(duì)不同異常類型分別設(shè)置多個(gè)except子句,格式如下:try:#可能會(huì)引發(fā)異常的代碼塊exceptException1:#處理類型為Exception1的代碼塊exceptException2:#處理類型為Exception2的代碼塊exceptException3:#處理類型為Exception3的代碼塊…一、try-except例:捕捉多個(gè)異常ZeroDivisionError異常和ValueError異常。try:a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))c=a/bprint('商為:',c)exceptZeroDivisionError:print('除數(shù)不能為0!')exceptValueError:print('被除數(shù)和除數(shù)應(yīng)為數(shù)值類型!')一、try-except程序運(yùn)行效果2.捕捉多個(gè)異常為減少代碼量,Python允許將多個(gè)異常類型放到一個(gè)元組中,然后使用一個(gè)except子句同時(shí)捕捉多種異常,并且共用同一段異常處理代碼。一、try-except2.捕捉多個(gè)異常try:#可能會(huì)引發(fā)異常的代碼塊except(Exception1,Exception2,Exception3,...):#處理異常的代碼塊例:以元組的形式捕捉多異常ZeroDivisionError異常和ValueError異常。try:a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))c=a/bprint('商為:',c)except(ZeroDivisionError,ValueError):print('捕獲到異常!')一、try-except2.捕捉多個(gè)異常程序運(yùn)行效果3.捕獲全部異常如果無(wú)法確定要對(duì)哪一類異常進(jìn)行處理,只是希望在try語(yǔ)句塊出現(xiàn)任何異常時(shí)都想要捕捉到,即捕捉程序中的全部異常,那么就可以將except之后的異常類型設(shè)置為Exception或者省略不寫。一、try-except例:捕捉全部異常。try:a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))c=a/bprint('商為:',c)exceptException:
print('捕獲到異常')程序運(yùn)行效果例:捕獲異常的描述信息。try:a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))c=a/bprint('商為:',c)exceptExceptionasr:print('捕獲到異常:%s'%r)在異常類型之后使用as關(guān)鍵字來(lái)獲取異常的具體信息。3.捕獲全部異常一、try-except程序運(yùn)行效果try-except語(yǔ)句還有一個(gè)可選的else子句,如要使用該子句,必須將其放在所有except子句之后。該子句將在try子句沒(méi)有發(fā)生任何異常時(shí)執(zhí)行。該結(jié)構(gòu)的語(yǔ)法格式如下:try:#可能會(huì)引發(fā)異常的代碼塊exceptException[asreason]:#出現(xiàn)異常后執(zhí)行的代碼塊else:#如果try子句中的代碼沒(méi)有引發(fā)異常,則執(zhí)行該代碼塊二、try-except-else例:兩數(shù)相除。a=float(input('請(qǐng)輸入被除數(shù):'))b=float(input('請(qǐng)輸入除數(shù):'))try:c=a/bexceptExceptionaserror:print('出錯(cuò)啦!原因:',error)else:print('商為:',c)
二、try-except-else運(yùn)行程序,輸入數(shù)據(jù),結(jié)果如下:請(qǐng)輸入被除數(shù):2請(qǐng)輸入除數(shù):0出錯(cuò)啦!原因:floatdivisionbyzero
再次運(yùn)行程序,輸入數(shù)據(jù),結(jié)果如下:請(qǐng)輸入被除數(shù):1請(qǐng)輸入除數(shù):2商為:0.5try-except語(yǔ)句中增加finally子句是異常處理try-except-finally結(jié)構(gòu),在此結(jié)構(gòu)中無(wú)論try子句代碼塊是否發(fā)生異常,都執(zhí)行finally子句代碼塊。該結(jié)構(gòu)的語(yǔ)法格式如下:try:#可能會(huì)引發(fā)異常的代碼塊exceptException[asreason]:#出現(xiàn)異常后執(zhí)行的代碼塊finally:#無(wú)論try子句中的代碼有沒(méi)有引發(fā)異常,都會(huì)執(zhí)行的代碼塊三、try-except-finally例:使用finally子句清理文件資源try:f=open('1.txt',mode='r',encoding='utf-8')print(f.read())exceptFileNotFoundErroraserror:print(error)finally:f.close()print('文件已關(guān)閉!')運(yùn)行程序時(shí),如果“1.txt”文件不存在,就會(huì)在finally子句中關(guān)閉文件時(shí)引發(fā)異常。三、try-except-finally運(yùn)行程序時(shí),如果“1.txt”文件存在,結(jié)果如下。Python文件已關(guān)閉!Python異常處理結(jié)構(gòu)中可以同時(shí)包含多個(gè)except子句、else子句和finally子句,其語(yǔ)法格式如下:try:#可能會(huì)引發(fā)異常的代碼塊exceptException1:#處理異常類型1的代碼塊exceptException2:#處理異常類型2的代碼塊…else:#如果try子句中的代碼沒(méi)有引發(fā)異常,則執(zhí)行該代碼塊finally:#無(wú)論try子句中的代碼有沒(méi)有引發(fā)異常,都會(huì)執(zhí)行的代碼塊四、try-except-else-finallytryexceptelsefinally感謝您的觀看Python編程基礎(chǔ)拋出異常一、raise語(yǔ)句二、assert語(yǔ)句一、raise語(yǔ)句在Python中,可以使用raise語(yǔ)句強(qiáng)制拋出指定的異常?;菊Z(yǔ)法結(jié)構(gòu)如下所示。raise異常類
#結(jié)構(gòu)1:使用異常類名拋出指定的異常raise異常類對(duì)象
#結(jié)構(gòu)2:使用異常類對(duì)象拋出指定的異常raise
#結(jié)構(gòu)3:使用剛出現(xiàn)過(guò)得異常重新拋出異常1.使用異常類名拋出指定的異常使用“raise
異常類”語(yǔ)句可以引發(fā)該語(yǔ)句中異常類對(duì)應(yīng)的異常。例如:raiseNameError程序運(yùn)行結(jié)果如下:Traceback(mostrecentcalllast):File"D:/PycharmProjects/untitled/1.py",line1,in<module>raiseNameErrorNameError一、raise語(yǔ)句2.使用異常類對(duì)象拋出指定的異常使用異常類的實(shí)例引發(fā)異常的基本語(yǔ)法格式如下:raise異常類對(duì)象('異常描述')例如:raiseNameError('命名錯(cuò)誤')程序運(yùn)行結(jié)果如下:Traceback(mostrecentcalllast):File"D:/PycharmProjects/untitled/1.py",line1,in<module>raiseNameError('命名錯(cuò)誤')NameError:命名錯(cuò)誤一、raise語(yǔ)句3.使用剛出現(xiàn)過(guò)得異常重新拋出異常使用不帶任何參數(shù)的raise語(yǔ)句可以引發(fā)剛剛發(fā)生過(guò)的異常。例如:try:raiseNameError('命名錯(cuò)誤')exceptNameError:print('出現(xiàn)了一個(gè)異常!')raise程序運(yùn)行結(jié)果如下:出現(xiàn)了一個(gè)異常!Traceback(mostrecentcalllast):File"D:/PycharmProjects/untitled/1.py",line2,in<module>raiseNameError('命名錯(cuò)誤')NameError:命名錯(cuò)誤一、raise語(yǔ)句assert語(yǔ)句又稱為斷言語(yǔ)句,是利用異常來(lái)判斷某個(gè)條件是否滿足的一個(gè)常用的編程技巧。assert語(yǔ)句用來(lái)判斷一個(gè)邏輯表達(dá)式,如果該表達(dá)式為False時(shí)就會(huì)觸發(fā)AssertionError異常。assert語(yǔ)句的基本語(yǔ)法格式如下:assert表達(dá)式[,異常信息]邏輯上等同于:ifnot邏輯表達(dá)式:raiseAssertionError(異常信息)二、assert語(yǔ)句例:
assert語(yǔ)句拋出異常。um_one=int(input("請(qǐng)輸入被除數(shù):"))num_two=int(input("請(qǐng)輸入除數(shù):"))assertnum_two!=0,'除數(shù)不能為0'#assert語(yǔ)句判定num_two不等于0result=um_one/num_twoprint(um_one,'/',num_two,'=',result)二、assert語(yǔ)句程序運(yùn)行效果感謝您的觀看Python編程基礎(chǔ)用戶自定義異常Python的異常分為兩種:一種是內(nèi)置異常,在某些錯(cuò)誤出現(xiàn)時(shí)自動(dòng)觸發(fā);另一種是用戶自定義異常,就是用戶根據(jù)自己的需求設(shè)置的異常。用戶自定義異常類需繼承自Exception類,通過(guò)__init__()方法初始化異常類對(duì)象,并通過(guò)raise語(yǔ)句拋出,捕獲異常后可直接通過(guò)異常對(duì)象輸出說(shuō)明信息。用戶自定義異常例:用戶注冊(cè)賬戶輸入密碼時(shí),輸入的密碼長(zhǎng)度限制為最少是3,要求自定義異常,當(dāng)輸入的密碼長(zhǎng)度小于3時(shí)拋出異常。用戶自定義異常classShortInputError(Exception):'''自定義異常類'''def__init__(self,length,atleast):self.length=length #輸入的密碼長(zhǎng)度self.atleast=atleast #限制的密碼長(zhǎng)度try:text=input("請(qǐng)輸入密碼:")iflen(text)<3:raiseShortInputError(len(text),3)exceptShortInputErrorasresult:print("ShortInputError:輸入的長(zhǎng)度是%d,長(zhǎng)度至少應(yīng)是%d"%(result.length,result.atleast))else:print("密碼設(shè)置成功")程序運(yùn)行效果用戶自定義異常感謝您的觀看Python編程基礎(chǔ)任務(wù)2
求解三角形面積
中國(guó)是一個(gè)具有悠久歷史的文明國(guó)家,數(shù)學(xué)作為中國(guó)古代科學(xué)的一門重要學(xué)科,取得了豐碩的成果。早在1247年,中國(guó)宋代的數(shù)學(xué)家秦九韶就在《數(shù)書(shū)九章》中記述了“三斜求積術(shù)”,填補(bǔ)了中國(guó)數(shù)學(xué)史中的一個(gè)空白?!叭鼻蠓e術(shù)”用現(xiàn)代公式表示,即三角形三邊長(zhǎng)為a、b、c,那么面積是1/4*sqrt[(a+b+c)(a+b-c)(a+c-b)(b+c-a)]。本任務(wù)將帶領(lǐng)大家編寫Python程序,利用Python中的異常處理機(jī)制完成“根據(jù)輸入的三角形三條邊長(zhǎng)計(jì)算三角形面積”的求解問(wèn)題。43任務(wù)描述根據(jù)輸入的三角形三條邊的整數(shù)邊長(zhǎng),求出三角形的面積,要求:輸入的三條邊的邊長(zhǎng)用空格分隔,并且只有在用戶輸入“q”后才能退出。44任務(wù)實(shí)施任務(wù)需求——求解三角形面積輸入:三角形三條邊長(zhǎng);輸出:三角形的面積。1.定義check_is_triangle()函數(shù),對(duì)三角形三條邊進(jìn)行判斷,如果無(wú)法構(gòu)成三角形,則引發(fā)ValueError異常。45任務(wù)實(shí)施任務(wù)實(shí)施2.由于任務(wù)中要求輸入3個(gè)整數(shù),所以如果輸入的三條邊不是整數(shù),會(huì)引發(fā)ValueError異常。3.由于整數(shù)是3個(gè),且用空格分隔,我們需要使用字符串的split()函數(shù)將字符串用空格切割,然后放入列表中,這時(shí)如果整數(shù)不是3個(gè),當(dāng)引用列表里的3個(gè)整數(shù)時(shí),會(huì)引發(fā)IndexError異常。任務(wù)實(shí)施4.使用try...except...else語(yǔ)句在else子句中計(jì)算三角形面積。感謝您的觀看Python編程
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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-2030全球核電用鋼管行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)鋼制垂直推拉門行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球微孔織物行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球半導(dǎo)體電鍍前處理劑行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球熱水箱行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)手機(jī)支付安全行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)超高壓HPP滅菌設(shè)備行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 液氨運(yùn)輸合同模板
- 2025員工入股合同(美容美發(fā))
- 外墻保溫勞務(wù)分包合同
- Unit6AtthesnackbarStorytimeDiningwithdragons(課件)譯林版英語(yǔ)四年級(jí)上冊(cè)
- 2023年四川省公務(wù)員錄用考試《行測(cè)》真題卷及答案解析
- 機(jī)電一體化系統(tǒng)設(shè)計(jì)-第5章-特性分析
- 2025年高考物理復(fù)習(xí)壓軸題:電磁感應(yīng)綜合問(wèn)題(原卷版)
- 雨棚鋼結(jié)構(gòu)施工組織設(shè)計(jì)正式版
- 醫(yī)院重點(diǎn)監(jiān)控藥品管理制度
- 2024尼爾森IQ中國(guó)本土快消企業(yè)調(diào)研報(bào)告
- 2024年印度辣椒行業(yè)狀況及未來(lái)發(fā)展趨勢(shì)報(bào)告
- 骨科醫(yī)院感染控制操作流程
- 鑄鋁焊接工藝
- 《社區(qū)康復(fù)》課件-第六章 骨關(guān)節(jié)疾病、損傷患者的社區(qū)康復(fù)實(shí)踐
評(píng)論
0/150
提交評(píng)論