版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
酒精度測試
項目介紹項目介紹飲酒駕駛醉酒駕駛項目介紹示
例
知識與技能儲備熟悉熟悉異常的定義12異常的捕獲與處理方式4自定義異常
拋出異常的方法3了解了解掌握掌握熟悉認識異常認識異常認識異常再好的程序員也無法完全預(yù)見代碼運行時遇到的所有情況;最充分的測試也很難枚舉所有可能出現(xiàn)的情況,這時候異常處理成為避免特殊情況下軟件崩潰的利器。包括Python語言在內(nèi)的所有高級編程語言,都提供了不同形式的異常處理機制,并且很強大。認識異常異常,在Python中是指程序運行時引發(fā)的錯誤,引發(fā)錯誤的原因有很多,如:除零、下標越界、文件不存在等。這些錯誤得不到正確的處理將會導(dǎo)致程序崩潰并終止運行。例如,運行下面的程序代碼會發(fā)生錯誤。認識異常熟悉掌握list=[1,2,3,4,5]print(list[5])報錯:Traceback(mostrecentcalllast):print(list[5])IndexError:listindexoutofrange通過前面的學習,大家應(yīng)該已經(jīng)注意到,如果類似于上面這些錯誤得不到正確的處理,將會導(dǎo)致程序崩潰并終止運行,這就需要引入異常處理機制來解決了。列表元下標超出范圍認識異常對異常進行處理程序繼續(xù)運行程序中預(yù)設(shè)對付異常的處理辦法程序運行出現(xiàn)異常Pathon異常處理,是因為程序執(zhí)行過程中出錯而在正??刂屏髦獠扇〉男袨椤.擯ython監(jiān)測到一個錯誤時,解釋器就會指出當前程序已無法繼續(xù)執(zhí)行下去,這時候就出現(xiàn)了異常。當程序執(zhí)行過程中出現(xiàn)錯誤時Python會自動引發(fā)異常,程序員也可以通過raise語句顯式地引發(fā)異常。合理地使用異常處理結(jié)構(gòu)可以使得程序更加健壯,具有更高的容錯性。異常的類型print(3/0)
Traceback(mostrecentcalllast):File“F:\python線上課程\raise.py”,line12,in<module>print(3/0)ZeroDivisionError:divisionbyzero示
例異常的類型異常信息中,通常包含異常代碼所在行號、異常的類型和異常的描述信息。運行結(jié)果:異常代碼所在行號異常的描述信息異常的類型認識異常Python程序運行出錯時產(chǎn)生的每個異常類型都對應(yīng)一個類。程序運行時出現(xiàn)的異常,大多繼承自Exception類,Exception類又繼承了異常類的基類BaseException。所有異常類型的父類用戶中斷執(zhí)行時會產(chǎn)生的異常內(nèi)置的、非系統(tǒng)退出的異常的基類Python解釋器退出異常生成器退出異常異常的類型NameError,是程序中使用了未定義的變量而引發(fā)的異常。例如,訪問一個未聲明過的變量test,運行結(jié)果如下:運行結(jié)果:NameErrorprint(test)
Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line1,in<module>print(test)NameError:name'test'isnotdefined異常的類型IndexError,是程序越界訪問時引發(fā)的異常。例如,使用索引0訪問空列表num_list,運行結(jié)果如下:運行結(jié)果:IndexErrornum_list=[]num_list[0]
Traceback(mostrecentcalllast):File"G:/Python/Project/Test.py",line2,in<module>num_list[0]IndexError:listindexoutofrange異常的類型AttributeError,是使用對象訪問不存在的屬性時引發(fā)的異常。例如,Car類中動態(tài)地添加了兩個屬性color和brand,使用Car類的對象依次訪color、brand屬性及不存在的name屬性,運行結(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,是未找到指定文件或目錄時引發(fā)的異常。例如,打開一個本地不存在的文件,運行結(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'運行結(jié)果:異常處理異常處理Python既可以直接通過try-except語句實現(xiàn)簡單的異常捕獲與處理的功能,也可以將try-except語句與else或finally子句組合實現(xiàn)更強大的異常捕獲與處理的功能。try-except
語句Python異常處理結(jié)構(gòu)中最基本的結(jié)構(gòu)是try...except...結(jié)構(gòu)。try:
#可能會引發(fā)異常的代碼except:
#異常處理代碼語句格式…………try-except
語句try字句中的代碼塊包含可能會引發(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
語句運行結(jié)果:try:
f=open("note.txt","r")
content=f.readlines()
forlineincontent:
print(line)
exceptFileNotFoundError:
print("文件不存在!")示
例try-except
語句處理多個異常在實際開發(fā)中,同一段代碼可能會拋出多種異常,并且需要針對不同的異常類型進行相應(yīng)的處理。為了支持多種異常的捕捉和處理,Python提供了帶有多個except的異常處理結(jié)構(gòu),一旦某個except捕捉到了異常,則其他的except子句將不會再嘗試捕捉異常。
try:
#可能會引發(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])示
例處理多個異常運行結(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])示
例處理多個異常運行結(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("下標越界了!")
exceptZeroDivisionErrorasresult:
print("0不能作為除數(shù)!")處理多個異常異常處理完整語句異常結(jié)構(gòu)中的else字句帶有else子句的異常結(jié)構(gòu),可以看作是一種特殊的選擇結(jié)構(gòu)。try:
#可能會引發(fā)異常的代碼exceptException[asreason]:
#用來處理異常的代碼else:
#如果try子句中的代碼沒有引發(fā)
異常,就繼續(xù)執(zhí)行這里的代碼語句格式如果try中的代碼拋出了異常并且被某個except語句捕獲,則執(zhí)行相應(yīng)的異常處理代碼,這種情況下就不會執(zhí)行else中的代碼;如果try中的代碼沒有拋出異常,則執(zhí)行else塊的代碼。0.8333333333333334正常!0.030959752321981424正常!0.4166666666666667正常!出現(xiàn)錯誤:divisionbyzero0.23255813953488372正常!異常結(jié)構(gòu)中的else字句list=[12,323,24,0,43]
forsinlist:
try:
r=10/s
print(r)
exceptExceptionase:
print("出現(xiàn)錯誤:",e)
else:
print("正常!")示
例異常結(jié)構(gòu)中的finally字句在這種結(jié)構(gòu)中,無論try中的代碼是否發(fā)生異常,也不管拋出的異常有沒有被except語句捕獲,finally子句中的代碼總是會得到執(zhí)行。因此,finally中的代碼常用來做一些清理工作以釋放try子句中申請的資源。try:
#可能會引發(fā)異常的代碼exceptException[asreason]:
#用來處理異常的代碼finally:
#無論try子句中的代碼是否引發(fā)異常,都會執(zhí)行這里的代碼語句格式0.8333333333333334正常!-----執(zhí)行完畢!0.030959752321981424正常!-----執(zhí)行完畢!0.4166666666666667正常!-----執(zhí)行完畢!出現(xiàn)錯誤: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)錯誤:",e)
else:
print("正常!")
finally:
print("----執(zhí)行完畢!")示
例finally字句用途記錄日志只要進行了操作,就得記錄日志,無論操作是否成功,還是出現(xiàn)異常,都得把這個操作記下寫進finally內(nèi)。2.關(guān)閉文件資源無論它中間是否出現(xiàn)錯誤,都能正常執(zhí)行使用關(guān)閉。包括關(guān)閉數(shù)據(jù)庫的連接,也需要通過finally里邊去編寫。異常處理的完整語句整個異常處理完整語句的執(zhí)行思路如下:1、正常執(zhí)行的程序在可能會引發(fā)異常的代碼(try語句塊)中執(zhí)行,在執(zhí)行的過程中如果發(fā)生了異常,是需要中斷當前在try語句塊中的執(zhí)行,然后跳轉(zhuǎn)到對應(yīng)的異常處理塊中開始執(zhí)行。2、Python會從第一個except處開始查找,如果找到了對應(yīng)的異常類型,則進入其提供的except塊中進行處理;如果沒有找到,則直接進入不帶異常類型的except塊處進行處理;3、不帶異常類型的except塊是可選項,如果沒有提供,這個異常就會被提交給Python進行默認處理,處理方式則是終止應(yīng)用程序并打印提示信息。4、如果在try語句塊執(zhí)行過程中沒有發(fā)生任何異常,則程序在執(zhí)行完try語句塊后會進入else
執(zhí)行塊中(如果存在的話)執(zhí)行。無論是否發(fā)生了異常,只要提供了finally
語句,程序執(zhí)行的最后一步總會執(zhí)行它對應(yīng)的代碼塊。try:
#可能會引發(fā)異常的代碼exceptA:
#處理異常A的代碼exceptB:
#處理異常B的代碼else:
#處理沒有異常的代碼finally:
#最后必須處理的代碼語句格式異常處理的完整語句在Python異常處理的完整語句中,值得大家注意的有以下幾點:完整語句中,try/except/else/finally出現(xiàn)的順序,必須按照格式中的先后次序,即所有的
except
必須在
else和
finally
之前,else
必須在
finally
之前,否則會出現(xiàn)語法錯誤。else
與
finally
是可選的,不一定必須出現(xiàn);else
語句如果存在,必須以
except語句為前提,否則會引發(fā)語法錯誤。使用assert語句拋出異常使用assert語句拋出異常assert語句又稱為斷言語句。assert
表達式,[異常信息]語句格式assert語句可以幫助程序開發(fā)者在開發(fā)階段調(diào)試程序,以保證程序能夠正確運行。defmeasure():
temp=int(input(“請輸入溫度值:”))
asserttemp<=37andtemp>=36,“正常體溫在36~37℃之間”
print(“您的體溫是:"+str(temp))
measure()示
例使用assert語句拋出異常defmeasure():
temp=int(input(“請輸入溫度值:”))
asserttemp<=37andtemp>=36,“正常體溫在36~37℃之間”
print(“您的體溫是:"+str(temp))
try:
measure()
exceptAssertionErrorase:
print(e)示
例使用assert語句拋出異常使用raise語句拋出異常Num1=10Num2=0print(num1/num2)示
例拋出異常系統(tǒng)回溯(Traceback)錯誤信息,自動拋出異常。拋出異常如何手動的去拋出異常拋出異常應(yīng)用什么樣的場景中拋出異常人體正常溫度范圍:
36~37℃
38℃32℃拋出提醒!人體體溫defmeasure():
temp=int(input(“請輸入溫度值:”))
iftemp>37ortemp<36:
print("體溫出現(xiàn)異常!")
else:
print("您的體溫是:"+str(temp))measure()示
例拋出異常defmeasure():
temp=int(input("請輸入溫度值:"))
iftemp>37ortemp<36:
raiseValueError("體溫出現(xiàn)異常!")
else:
print("您的溫度是:"+str(temp))
measure()示
例使用raise語句拋出異常defmeasure():
temp=int(input("請輸入溫度值:"))
iftemp>37ortemp<36:
raiseValueError("體溫出現(xiàn)異常!")
else:
print("您的溫度是:"+str(temp))
try:
measure()
exceptValueErrorase:
print(e)示
例使用raise語句拋出異常自定義異常自定義異常前面捕捉到異?;径际窍到y(tǒng)內(nèi)置的,在程序中遇到某些錯誤時觸發(fā)。當程序員需要根據(jù)自己的需要設(shè)置異常,例如,用戶在輸入考試成績時,需要限定成績分值的有效范圍。這時就需要程序員自定義異常來解決。因此,在python的異常分為兩種:內(nèi)建異常,就是python自己定義的異常。
不夠用,用戶自定義異常。異常繼承樹BaseException所有異常的基類SystemExitPathon解釋器退出KeyboardInterrupt鍵盤中斷Exception異常NameError、ValueError、IOError、ImportError……自定義異常從異常繼承樹中的分布情況可知:Exception類是所有異類的基類,創(chuàng)建一個繼承Exception類的子類,它就是自定義的異常類。當遇到程序員設(shè)定的
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學校保安監(jiān)督管理制度(3篇)
- 孟德爾的豌豆雜交實驗(一)課件2025-2026學年高一下學期生物人教版必修2
- 2026山東濟南市歷城區(qū)屬事業(yè)單位招聘初級綜合類崗位人員備考考試試題及答案解析
- 2026北京朝陽航空工業(yè)機載低空經(jīng)濟事業(yè)部招聘參考考試題庫及答案解析
- 2026廣東廣州市越秀區(qū)流花街招聘飯?zhí)脧N師1人備考考試題庫及答案解析
- 電視機換臺游戲
- 2026青海西寧國晟新能源集團有限公司招聘1人參考考試題庫及答案解析
- 2026年度濟南市市中區(qū)事業(yè)單位公開招聘初級綜合類崗位人員(63人)備考考試題庫及答案解析
- 2026年上半年云南省殘疾人聯(lián)合會直屬事業(yè)單位招聘人員(1人)備考考試試題及答案解析
- 2026中國上市公司協(xié)會校園招聘備考考試試題及答案解析
- 腫瘤壞死因子受體相關(guān)周期性綜合征診療指南
- 中醫(yī)協(xié)定處方管理制度
- 高一數(shù)學第一學期必修一、四全冊導(dǎo)學案
- 2025年開封大學單招職業(yè)技能測試題庫完整
- 亞馬遜運營廣告培訓
- 中建給排水施工方案EPC項目
- 電氣工程及自動化基于PLC的皮帶集中控制系統(tǒng)設(shè)計
- 醫(yī)學教材 常見輸液反應(yīng)的處理(急性肺水腫)
- FURUNO 電子海圖 完整題庫
- 企業(yè)年會攝影拍攝合同協(xié)議范本
- 焊接質(zhì)量控制規(guī)范培訓課件
評論
0/150
提交評論