版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
異常處理—為查詢身份證歸屬地添加異常任務(wù)描述
在前面文件任務(wù)一中,用戶通過輸入身份證前6位數(shù)字可以查詢到身份證歸屬地,此任務(wù)實(shí)現(xiàn)了歸屬地查詢的功能,如果用戶訪問的“身份證碼值對照表.txt”文件不在當(dāng)前路徑下,就會(huì)引發(fā)異常。
本任務(wù)要求通過添加異常處理功能,完善查詢身份歸屬地的程序。
現(xiàn)實(shí)生活并不是一帆風(fēng)順的,總會(huì)遇到各種突發(fā)情況,譬如,飛機(jī)延誤、火車晚點(diǎn)、上下班路上堵車等,這些情況都會(huì)導(dǎo)致上班遲到、會(huì)議錯(cuò)過、約會(huì)趕不上。同樣,程序在運(yùn)行過程中也會(huì)遇到各種各樣的問題,最常見的問題就是語法錯(cuò)誤。當(dāng)開發(fā)人員編寫了不符合Python語法格式的代碼時(shí)程序就會(huì)被中止運(yùn)行。除此之外還有邏輯錯(cuò)誤,即語法格式正確但在運(yùn)行時(shí)仍會(huì)發(fā)生錯(cuò)誤。無論是哪種錯(cuò)誤,都會(huì)導(dǎo)致程序無法正常運(yùn)行。當(dāng)程序被中止時(shí),屏幕上會(huì)顯示如下信息:錯(cuò)誤類型錯(cuò)誤信息錯(cuò)誤位置01異常的定義及分類02捕獲異常03任務(wù)實(shí)現(xiàn)異常定義及分類01
異常的定義異常是指在程序運(yùn)行過程中檢測到的錯(cuò)誤。若異常不被處理,默認(rèn)情況下會(huì)導(dǎo)致程序崩潰而中止運(yùn)行。異常的分類所有的異常類都繼承自基類BaseException。BaseException類中包含4個(gè)子類,其中子類Exception是大多數(shù)常見異常類的父類。異常的分類Exception中常見的子類及其描述見下表。捕獲異常02try-except語句try-except語句用于捕獲程序運(yùn)行過程中出現(xiàn)的異常,其格式如下:try:
可能出錯(cuò)的代碼......except[異常類型]:
錯(cuò)誤處理語句......try:foriin3:print(i)exceptTypeError:print('循環(huán)應(yīng)改為:foriinrange(3):')譬如:try-except語句執(zhí)行過程如下:解釋器優(yōu)先執(zhí)行try子句中的代碼。若try子句未產(chǎn)生異常,則忽略except子句中的代碼。若try子句產(chǎn)生異常,則忽略try子句的剩余代碼,轉(zhuǎn)而執(zhí)行except子句中的代碼。捕獲單個(gè)異常捕獲程序運(yùn)行過程中的單個(gè)異常時(shí),需要指定具體的異常。try:foriin3:print(i)exceptTypeError
ase:print(f"異常原因:{e}")捕獲多個(gè)異常捕獲程序運(yùn)行過程中的多個(gè)異常時(shí),既可以將多個(gè)異常以元組形式放在except語句后面來處理,也可以聯(lián)合使用多個(gè)except語句。try:print(count)except(NameError,IndexError)aserror:print(f"異常原因:{error}")try:print(count)exceptNameErroraserror:print(f"異常原因:{error}")exceptIndexErroraserror:print(f"異常原因:{error}")捕獲所有異常捕獲程序運(yùn)行過程中的所有異常時(shí),既可以將所有異常的父類Exception置于except后面來處理,也可以采用省略except后面的異常類型的方式來處理。try:print(count)exceptExceptionaserror:print(f"異常原因:{error}")try:print(count)except:print("程序出現(xiàn)異常,原因未知")else子句else子句與try-except語句連用時(shí),其中的代碼會(huì)在try子句未出現(xiàn)異常時(shí)執(zhí)行。try:
可能出錯(cuò)的語句......except:
出錯(cuò)后的執(zhí)行語句else:
未出錯(cuò)時(shí)的執(zhí)行語句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("請輸入一個(gè)整數(shù):"))
print(alp[n])except(NameError,TypeError):print("輸入錯(cuò)誤,請輸入一個(gè)整數(shù)")else:print("沒有發(fā)生異常")譬如:finally子句finally子句與try-except語句連用時(shí),無論try-except是否捕獲到異常,finally子句中的代碼都要執(zhí)行。try:
可能出錯(cuò)的語句......except:
出錯(cuò)后的執(zhí)行語句finally:
無論是否出錯(cuò)都會(huì)執(zhí)行的語句try:alp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"n=eval(input("請輸入一個(gè)整數(shù):"))
print(alp[n])except(NameError,TypeError):print("輸入錯(cuò)誤,請輸入一個(gè)整數(shù)")else:print("沒有發(fā)生異常")finally:print("程序執(zhí)行完畢")譬如:異常處理應(yīng)用編程檢測輸入是否為整數(shù),如果是整數(shù)顯示出來,否則捕獲錯(cuò)誤并報(bào)錯(cuò)。defint_input(ch=''):try:ch=int(ch)print("%d"%ch)exceptValueError:print('出錯(cuò),您輸入的不是整數(shù)')if__name__=='__main__':x=input('請輸入一個(gè)整數(shù):')int_input(x)任務(wù)實(shí)現(xiàn)——為查詢身份證歸屬地添加異常03根據(jù)題意,由于“查詢身份證歸屬地”程序需要訪問當(dāng)前路徑下的“身份證碼值對照表.txt”文件,若在讀取時(shí)沒有在當(dāng)前路徑下找到該文件,則會(huì)引發(fā)FileNotFoundError異常,所以本任務(wù)直接使用try...except語句捕獲并處理FileNotFoundError異常即可。
任務(wù)分析程序代碼根據(jù)異常處理方法,程序如下:importjsontry:f=open("身份證碼值對照表.txt",'r',encoding='utf-8')content=f.read()content_dict=json.loads(content)#轉(zhuǎn)換為字典類型
address=input('請輸入身份證前6位:')forkey,valincontent_dict.items():ifkey==address:print(val)f.close()exceptFileNotFoundError:print("文件不存在")任務(wù)總結(jié)
異常是指在程序運(yùn)行過程中檢測到的錯(cuò)誤。所有的異常類都繼承自基類BaseException。BaseException類中包含4個(gè)子類,其中子類Exception是大多數(shù)常見異常類的父類。通常是通過try-except語句捕獲程序運(yùn)行過程中出現(xiàn)的異常。當(dāng)try子句中的代碼未產(chǎn)生異常,則忽略except子句中的代碼;當(dāng)try子句產(chǎn)生異常,則忽略try子句的剩余代碼,轉(zhuǎn)而執(zhí)行except子句中的代碼。利用as子句可以獲得異常的具體信息。except子句還可以和else子句及finally子句連用,完成更多的處理。謝謝觀看自定義異?!獧z測系統(tǒng)密碼異常任務(wù)描述輸入密碼,密碼少于8位拋出異常并輸出異常。
當(dāng)程序發(fā)生錯(cuò)誤時(shí)系統(tǒng)都會(huì)自動(dòng)拋出異常,那么,Python中能不能手動(dòng)拋出異常?回答是可以的。Python中使用raise語句完成手動(dòng)拋出異常。01拋出異常02自定義異常03任務(wù)實(shí)現(xiàn)拋出異常01
拋出異常raise語句后可以添加具體的異常類,從而引發(fā)相應(yīng)的異常。raise異常類名譬如:raiseNameError使用異常類引發(fā)異常
拋出異常譬如:raiseNameError()raise語句后也可以添加異常類的對象,從而引發(fā)相應(yīng)的異常。使用異常對象引發(fā)異常raise異常對象
拋出異常raise語句后若不添加任何內(nèi)容,可重新引發(fā)剛才發(fā)生的異常,即由異常引發(fā)異常。try:num=10print(n)exceptNameErrorase:print(f'異常的原因是{e}')譬如:raiseraise重新引發(fā)異常
異常的傳遞若程序中產(chǎn)生的異常沒有被處理,產(chǎn)生的異常會(huì)一層一層向上傳遞,直至最上面一層也未做處理,就會(huì)程序崩潰。defget_width():num=int(input("請輸入除數(shù):"))width_len=10/numreturnwidth_lendefcalc_area():width_len=get_width()returnwidth_len*width_lendefshow_area():try:area_val=calc_area()print(f"正方形的面積是:{area_val}")exceptZeroDivisionErrorase:print(f"捕捉到異常:{e}")譬如除數(shù)為0產(chǎn)生異常ZeroDivisionError,函數(shù)中并沒有對這一異常進(jìn)行處理,所以就會(huì)向上層傳遞這個(gè)異常上一層函數(shù)也未處理,繼續(xù)向上傳遞這個(gè)異常該層包含異常處理代碼并捕獲了ZeroDivisionError異常
assert斷言語句assert斷言語句用于判定一個(gè)表達(dá)式是否為真,如果表達(dá)式為True,不做任何操作,否則引發(fā)AssertionError異常。assert表達(dá)式[,參數(shù)]這里,表達(dá)式是assert語句的判定對象,參數(shù)通常是一個(gè)自定義異?;蝻@示異常描述信息的字符串。譬如不帶參數(shù)帶參數(shù)age=int(input('請輸入年齡:'))assertage>=18,'年齡必須在18歲及以上'print("可以參加")有關(guān)異常的描述自定義異常02自定義異常Python允許程序開發(fā)人員自定義異常。自定義異常類的方法很簡單,只需創(chuàng)建一個(gè)類,讓它繼承Exception類或其它異常類即可。classCustomError(Exception):pass#空語句,保證程序結(jié)構(gòu)的完整性譬如classCustomError(Exception):passraiseCustomError自定義異常成功自定義異常自定義異常的應(yīng)用classCustomError(Exception):passtry:raiseCustomError('錯(cuò)誤代碼')exceptCustomErrorase:print(e)raise任務(wù)實(shí)現(xiàn)——檢測系統(tǒng)密碼異常03根據(jù)題意,首先定義密碼輸入函數(shù)input_password(),當(dāng)輸入的密碼pasword長度不足8位則自定義異常exp并拋出異常。主程序使用try…except捕獲調(diào)用輸入密碼函數(shù)的異常,并輸出異常。
任務(wù)分析程序代碼根據(jù)拋出異常方法,程序如下:definput_password():pasword=input("請輸入密碼:")iflen(pasword)>=8:returnpaswordelse:
exp=Exception("密碼長度小于8")
raise
exptry:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度耕地質(zhì)量提升工程補(bǔ)充耕地指標(biāo)采購合同3篇
- 現(xiàn)代家用電器技術(shù)發(fā)展趨勢與市場預(yù)測
- 物聯(lián)網(wǎng)下的嵌入式軟件從設(shè)計(jì)到實(shí)現(xiàn)的高效之路
- 二零二五年智慧城市規(guī)劃設(shè)計(jì)股份收購與合作合同3篇
- 2025年度航空航天結(jié)構(gòu)件加工與測試服務(wù)合同簽訂指南3篇
- 2025版跨境電商毛坯店面租賃合同范本4篇
- 二零二五版現(xiàn)代風(fēng)格美縫服務(wù)合同3篇
- 二零二五年度商用廚具升級(jí)改造項(xiàng)目合同4篇
- 二零二五年度果園土地流轉(zhuǎn)及綜合利用合同3篇
- 電化教學(xué)設(shè)備開啟教育信息化新篇章
- 2024公路瀝青路面結(jié)構(gòu)內(nèi)部狀況三維探地雷達(dá)快速檢測規(guī)程
- 2024風(fēng)力發(fā)電葉片維保作業(yè)技術(shù)規(guī)范
- 《思想道德與法治》課程教學(xué)大綱
- 2024光儲(chǔ)充一體化系統(tǒng)解決方案
- 處理后事授權(quán)委托書
- 食材配送服務(wù)方案投標(biāo)方案(技術(shù)方案)
- 足療店?duì)I銷策劃方案
- 封條(標(biāo)準(zhǔn)A4打印封條)
- 2024年北京控股集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 延遲交稿申請英文
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第十章動(dòng)作技能的指導(dǎo)與示范
評(píng)論
0/150
提交評(píng)論