




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
酒精度測(cè)試
項(xiàng)目介紹項(xiàng)目介紹飲酒駕駛醉酒駕駛項(xiàng)目介紹示
例
知識(shí)與技能儲(chǔ)備熟悉熟悉異常的定義12異常的捕獲與處理方式4自定義異常
拋出異常的方法3了解了解掌握掌握熟悉認(rèn)識(shí)異常認(rèn)識(shí)異常認(rèn)識(shí)異常再好的程序員也無法完全預(yù)見代碼運(yùn)行時(shí)遇到的所有情況;最充分的測(cè)試也很難枚舉所有可能出現(xiàn)的情況,這時(shí)候異常處理成為避免特殊情況下軟件崩潰的利器。包括Python語言在內(nèi)的所有高級(jí)編程語言,都提供了不同形式的異常處理機(jī)制,并且很強(qiáng)大。認(rèn)識(shí)異常異常,在Python中是指程序運(yùn)行時(shí)引發(fā)的錯(cuò)誤,引發(fā)錯(cuò)誤的原因有很多,如:除零、下標(biāo)越界、文件不存在等。這些錯(cuò)誤得不到正確的處理將會(huì)導(dǎo)致程序崩潰并終止運(yùn)行。例如,運(yùn)行下面的程序代碼會(huì)發(fā)生錯(cuò)誤。認(rèn)識(shí)異常熟悉掌握list=[1,2,3,4,5]print(list[5])報(bào)錯(cuò):Traceback(mostrecentcalllast):print(list[5])IndexError:listindexoutofrange通過前面的學(xué)習(xí),大家應(yīng)該已經(jīng)注意到,如果類似于上面這些錯(cuò)誤得不到正確的處理,將會(huì)導(dǎo)致程序崩潰并終止運(yùn)行,這就需要引入異常處理機(jī)制來解決了。列表元下標(biāo)超出范圍認(rèn)識(shí)異常對(duì)異常進(jìn)行處理程序繼續(xù)運(yùn)行程序中預(yù)設(shè)對(duì)付異常的處理辦法程序運(yùn)行出現(xiàn)異常Pathon異常處理,是因?yàn)槌绦驁?zhí)行過程中出錯(cuò)而在正??刂屏髦獠扇〉男袨?。當(dāng)Python監(jiān)測(cè)到一個(gè)錯(cuò)誤時(shí),解釋器就會(huì)指出當(dāng)前程序已無法繼續(xù)執(zhí)行下去,這時(shí)候就出現(xiàn)了異常。當(dāng)程序執(zhí)行過程中出現(xiàn)錯(cuò)誤時(shí)Python會(huì)自動(dòng)引發(fā)異常,程序員也可以通過raise語句顯式地引發(fā)異常。合理地使用異常處理結(jié)構(gòu)可以使得程序更加健壯,具有更高的容錯(cuò)性。異常的類型print(3/0)
Traceback(mostrecentcalllast):File“F:\python線上課程\raise.py”,line12,in<module>print(3/0)ZeroDivisionError:divisionbyzero示
例異常的類型異常信息中,通常包含異常代碼所在行號(hào)、異常的類型和異常的描述信息。運(yùn)行結(jié)果:異常代碼所在行號(hào)異常的描述信息異常的類型認(rèn)識(shí)異常Python程序運(yùn)行出錯(cuò)時(shí)產(chǎn)生的每個(gè)異常類型都對(duì)應(yīng)一個(gè)類。程序運(yùn)行時(shí)出現(xiàn)的異常,大多繼承自Exception類,Exception類又繼承了異常類的基類BaseException。所有異常類型的父類用戶中斷執(zhí)行時(shí)會(huì)產(chǎn)生的異常內(nèi)置的、非系統(tǒng)退出的異常的基類Python解釋器退出異常生成器退出異常異常的類型NameError,是程序中使用了未定義的變量而引發(fā)的異常。例如,訪問一個(gè)未聲明過的變量test,運(yùn)行結(jié)果如下:運(yùn)行結(jié)果:NameErrorprint(test)
Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line1,in<module>print(test)NameError:name'test'isnotdefined異常的類型IndexError,是程序越界訪問時(shí)引發(fā)的異常。例如,使用索引0訪問空列表num_list,運(yùn)行結(jié)果如下:運(yùn)行結(jié)果:IndexErrornum_list=[]num_list[0]
Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line2,in<module>num_list[0]IndexError:listindexoutofrange異常的類型AttributeError,是使用對(duì)象訪問不存在的屬性時(shí)引發(fā)的異常。例如,Car類中動(dòng)態(tài)地添加了兩個(gè)屬性color和brand,使用Car類的對(duì)象依次訪color、brand屬性及不存在的name屬性,運(yùn)行結(jié)果如下:AttributeErrorclassCar(object):
passcar=Car()car.color="黑色"car.brand="五菱"print(car.color)print(car.brand)print()Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line8,in<module>
AttributeError:'Car'objecthasnoattribute'name'異常的類型FileNotFound,是未找到指定文件或目錄時(shí)引發(fā)的異常。例如,打開一個(gè)本地不存在的文件,運(yùn)行結(jié)果如下:FileNotFoundErrorfile=open(“test.txt”)
Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line1,in<module>file=open("test.txt")FileNotFoundError:[Errno2]Nosuchfileordirectory:'test.txt'運(yùn)行結(jié)果:異常處理異常處理Python既可以直接通過try-except語句實(shí)現(xiàn)簡(jiǎn)單的異常捕獲與處理的功能,也可以將try-except語句與else或finally子句組合實(shí)現(xiàn)更強(qiáng)大的異常捕獲與處理的功能。try-except
語句Python異常處理結(jié)構(gòu)中最基本的結(jié)構(gòu)是try...except...結(jié)構(gòu)。try:
#可能會(huì)引發(fā)異常的代碼except:
#異常處理代碼語句格式…………try-except
語句try字句中的代碼塊包含可能會(huì)引發(fā)異常的語句except字句用來捕獲相應(yīng)的異常。如果try字句中的代碼塊引發(fā)異常并被except字句捕獲,則執(zhí)行except的代碼塊;如果出現(xiàn)異常但沒有被except捕獲,則往外拋出。如果try中的代碼塊沒有出現(xiàn)異常,則繼續(xù)往下執(zhí)行異常處理結(jié)構(gòu)后面的代碼;如果所有層都沒有捕獲并處理該異常,則程序崩潰并將該異常呈現(xiàn)給用戶,這是我們最不希望發(fā)生的事情。f=open("note.txt","r")
content=f.readlines()
forlineincontent:
print(line)示
例try-except
語句運(yùn)行結(jié)果:try:
f=open("note.txt","r")
content=f.readlines()
forlineincontent:
print(line)
exceptFileNotFoundError:
print("文件不存在!")示
例try-except
語句處理多個(gè)異常在實(shí)際開發(fā)中,同一段代碼可能會(huì)拋出多種異常,并且需要針對(duì)不同的異常類型進(jìn)行相應(yīng)的處理。為了支持多種異常的捕捉和處理,Python提供了帶有多個(gè)except的異常處理結(jié)構(gòu),一旦某個(gè)except捕捉到了異常,則其他的except子句將不會(huì)再嘗試捕捉異常。
try:
#可能會(huì)引發(fā)異常的代碼exceptException1:
#處理異常類型1的代碼exceptException2:
#處理異常類型2的代碼......語句格式list_1=[12,323,24,19,43]
list_2=[100,200,250,0,43,53]
foriinrange(len(list_2)):
print(list_1[i]/list_2[i])示
例處理多個(gè)異常運(yùn)行結(jié)果:list_1=[12,323,24,19,43]
list_2=[100,200,250,300,43,53]
foriinrange(len(list_2)):
print(list_1[i]/list_2[i])示
例處理多個(gè)異常運(yùn)行結(jié)果:list_1=[12,323,24,19,43]
list_2=[100,200,250,0,43,53]
try:
foriinrange(len(list_2)):
print(list_1[i]/list_2[i])
exceptIndexErrorasresult:
print("下標(biāo)越界了!")
exceptZeroDivisionErrorasresult:
print("0不能作為除數(shù)!")處理多個(gè)異常異常處理完整語句異常結(jié)構(gòu)中的else字句帶有else子句的異常結(jié)構(gòu),可以看作是一種特殊的選擇結(jié)構(gòu)。try:
#可能會(huì)引發(fā)異常的代碼exceptException[asreason]:
#用來處理異常的代碼else:
#如果try子句中的代碼沒有引發(fā)
異常,就繼續(xù)執(zhí)行這里的代碼語句格式如果try中的代碼拋出了異常并且被某個(gè)except語句捕獲,則執(zhí)行相應(yīng)的異常處理代碼,這種情況下就不會(huì)執(zhí)行else中的代碼;如果try中的代碼沒有拋出異常,則執(zhí)行else塊的代碼。0.8333333333333334正常!0.030959752321981424正常!0.4166666666666667正常!出現(xiàn)錯(cuò)誤:divisionbyzero0.23255813953488372正常!異常結(jié)構(gòu)中的else字句list=[12,323,24,0,43]
forsinlist:
try:
r=10/s
print(r)
exceptExceptionase:
print("出現(xiàn)錯(cuò)誤:",e)
else:
print("正常!")示
例異常結(jié)構(gòu)中的finally字句在這種結(jié)構(gòu)中,無論try中的代碼是否發(fā)生異常,也不管拋出的異常有沒有被except語句捕獲,finally子句中的代碼總是會(huì)得到執(zhí)行。因此,finally中的代碼常用來做一些清理工作以釋放try子句中申請(qǐng)的資源。try:
#可能會(huì)引發(fā)異常的代碼exceptException[asreason]:
#用來處理異常的代碼finally:
#無論try子句中的代碼是否引發(fā)異常,都會(huì)執(zhí)行這里的代碼語句格式0.8333333333333334正常!-----執(zhí)行完畢!0.030959752321981424正常!-----執(zhí)行完畢!0.4166666666666667正常!-----執(zhí)行完畢!出現(xiàn)錯(cuò)誤:divisionbyzero-----執(zhí)行完畢!0.23255813953488372正常!-----執(zhí)行完畢!異常結(jié)構(gòu)中的finally字句list=[12,323,24,0,43]
forsinlist:
try:
r=10/s
print(r)
exceptExceptionase:
print("出現(xiàn)錯(cuò)誤:",e)
else:
print("正常!")
finally:
print("----執(zhí)行完畢!")示
例finally字句用途記錄日志只要進(jìn)行了操作,就得記錄日志,無論操作是否成功,還是出現(xiàn)異常,都得把這個(gè)操作記下寫進(jìn)finally內(nèi)。2.關(guān)閉文件資源無論它中間是否出現(xiàn)錯(cuò)誤,都能正常執(zhí)行使用關(guān)閉。包括關(guān)閉數(shù)據(jù)庫的連接,也需要通過finally里邊去編寫。異常處理的完整語句整個(gè)異常處理完整語句的執(zhí)行思路如下:1、正常執(zhí)行的程序在可能會(huì)引發(fā)異常的代碼(try語句塊)中執(zhí)行,在執(zhí)行的過程中如果發(fā)生了異常,是需要中斷當(dāng)前在try語句塊中的執(zhí)行,然后跳轉(zhuǎn)到對(duì)應(yīng)的異常處理塊中開始執(zhí)行。2、Python會(huì)從第一個(gè)except處開始查找,如果找到了對(duì)應(yīng)的異常類型,則進(jìn)入其提供的except塊中進(jìn)行處理;如果沒有找到,則直接進(jìn)入不帶異常類型的except塊處進(jìn)行處理;3、不帶異常類型的except塊是可選項(xiàng),如果沒有提供,這個(gè)異常就會(huì)被提交給Python進(jìn)行默認(rèn)處理,處理方式則是終止應(yīng)用程序并打印提示信息。4、如果在try語句塊執(zhí)行過程中沒有發(fā)生任何異常,則程序在執(zhí)行完try語句塊后會(huì)進(jìn)入else
執(zhí)行塊中(如果存在的話)執(zhí)行。無論是否發(fā)生了異常,只要提供了finally
語句,程序執(zhí)行的最后一步總會(huì)執(zhí)行它對(duì)應(yīng)的代碼塊。try:
#可能會(huì)引發(fā)異常的代碼exceptA:
#處理異常A的代碼exceptB:
#處理異常B的代碼else:
#處理沒有異常的代碼finally:
#最后必須處理的代碼語句格式異常處理的完整語句在Python異常處理的完整語句中,值得大家注意的有以下幾點(diǎn):完整語句中,try/except/else/finally出現(xiàn)的順序,必須按照格式中的先后次序,即所有的
except
必須在
else和
finally
之前,else
必須在
finally
之前,否則會(huì)出現(xiàn)語法錯(cuò)誤。else
與
finally
是可選的,不一定必須出現(xiàn);else
語句如果存在,必須以
except語句為前提,否則會(huì)引發(fā)語法錯(cuò)誤。使用assert語句拋出異常使用assert語句拋出異常assert語句又稱為斷言語句。assert
表達(dá)式,[異常信息]語句格式assert語句可以幫助程序開發(fā)者在開發(fā)階段調(diào)試程序,以保證程序能夠正確運(yùn)行。defmeasure():
temp=int(input(“請(qǐng)輸入溫度值:”))
asserttemp<=37andtemp>=36,“正常體溫在36~37℃之間”
print(“您的體溫是:"+str(temp))
measure()示
例使用assert語句拋出異常defmeasure():
temp=int(input(“請(qǐng)輸入溫度值:”))
asserttemp<=37andtemp>=36,“正常體溫在36~37℃之間”
print(“您的體溫是:"+str(temp))
try:
measure()
exceptAssertionErrorase:
print(e)示
例使用assert語句拋出異常使用raise語句拋出異常Num1=10Num2=0print(num1/num2)示
例拋出異常系統(tǒng)回溯(Traceback)錯(cuò)誤信息,自動(dòng)拋出異常。拋出異常如何手動(dòng)的去拋出異常拋出異常應(yīng)用什么樣的場(chǎng)景中拋出異常人體正常溫度范圍:
36~37℃
38℃32℃拋出提醒!人體體溫defmeasure():
temp=int(input(“請(qǐng)輸入溫度值:”))
iftemp>37ortemp<36:
print("體溫出現(xiàn)異常!")
else:
print("您的體溫是:"+str(temp))measure()示
例拋出異常defmeasure():
temp=int(input("請(qǐng)輸入溫度值:"))
iftemp>37ortemp<36:
raiseValueError("體溫出現(xiàn)異常!")
else:
print("您的溫度是:"+str(temp))
measure()示
例使用raise語句拋出異常defmeasure():
temp=int(input("請(qǐng)輸入溫度值:"))
iftemp>37ortemp<36:
raiseValueError("體溫出現(xiàn)異常!")
else:
print("您的溫度是:"+str(temp))
try:
measure()
exceptValueErrorase:
print(e)示
例使用raise語句拋出異常自定義異常自定義異常前面捕捉到異?;径际窍到y(tǒng)內(nèi)置的,在程序中遇到某些錯(cuò)誤時(shí)觸發(fā)。當(dāng)程序員需要根據(jù)自己的需要設(shè)置異常,例如,用戶在輸入考試成績(jī)時(shí),需要限定成績(jī)分值的有效范圍。這時(shí)就需要程序員自定義異常來解決。因此,在python的異常分為兩種:內(nèi)建異常,就是python自己定義的異常。
不夠用,用戶自定義異常。異常繼承樹BaseException所有異常的基類SystemExitPathon解釋器退出KeyboardInterrupt鍵盤中斷Exception異常NameError、ValueError、IOError、ImportError……自定義異常從異常繼承樹中的分布情況可知:Exception類是所有異類的基類,創(chuàng)建一個(gè)繼承Exception類的子類,它就是自定義的異常類。當(dāng)遇到程序員設(shè)定的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- (正式版)DB65∕T 4913-2025 《地理標(biāo)志產(chǎn)品 木壘羊肉》
- 2026年水果種植公司幼苗移栽管理制度
- T-CIATCM 030.5-2019 中醫(yī)臨床護(hù)理信息基本數(shù)據(jù)集 第5部分:急診護(hù)理記錄
- (正式版)DB2312∕T 088-2023 《禽用油乳劑滅活疫苗細(xì)菌內(nèi)毒素含量檢驗(yàn)技術(shù)操作規(guī)程》
- 淘寶股市課件
- 氯堿工藝培訓(xùn)課件
- 氯氣課件總結(jié)
- 疫情知識(shí)培訓(xùn)資料課件
- 氫能源知識(shí)培訓(xùn)內(nèi)容課件
- S-Methyl-2-6-hydroxy-2-3-dihydrobenzofuran-3-yl-acetate-生命科學(xué)試劑-MCE
- 電商企業(yè)客服流失的問題及解決對(duì)策研究
- 血常規(guī)及凝血功能解讀
- 2025-2026學(xué)年人教版(2024)初中生物八年級(jí)上冊(cè)(全冊(cè))教學(xué)設(shè)計(jì)(附目錄)
- 2025年華為自動(dòng)化控制試題
- (2025年)江蘇省南通市輔警協(xié)警筆試筆試模擬考試試題含答案
- 學(xué)堂在線 生活英語聽說 章節(jié)測(cè)試答案
- 抗菌藥物合理應(yīng)用培訓(xùn)
- 2024年陜西延長(zhǎng)石油招聘真題
- 動(dòng)態(tài)關(guān)系網(wǎng)絡(luò)分析-洞察及研究
- 26.《方帽子店》課件
- 糧食加工企業(yè)管理制度
評(píng)論
0/150
提交評(píng)論