




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章異常和異常處理第9章異常和異常處理內(nèi)容提綱9.1文件和文件路徑
29.2文件的讀寫39.3文件定位4359.4文件相關(guān)函數(shù)及綜合應(yīng)用19.5CSV文件操作內(nèi)容提綱9.1文件和文件路徑29.2文件的讀寫39引例在前面的上機(jī)實(shí)踐過程中,讀者可能遇到過很多錯(cuò)誤或異常。錯(cuò)誤一般指語法錯(cuò)誤,通常是由于我們沒有正確掌握語法或輸入代碼過程中出錯(cuò)而造成的。這需要編程者自己盡力在編碼和輸入過程中避免。異常即是一個(gè)事件。該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行。引例在前面的上機(jī)實(shí)踐過程中,讀者可能遇到過很多錯(cuò)誤或引例下面的代碼根據(jù)用戶輸入的身高和體重?cái)?shù)據(jù)計(jì)算用戶的體重系數(shù)BMI。>>>height=float(input("enteryourheight(m):"))>>>weight=float(input("enteryourweight(kg):"))>>>bmi=round((weight/(height*height)),2)>>>print("yourBMIis:",bmi)程序要求輸入合理的數(shù)據(jù),一旦用戶誤將身高數(shù)據(jù)輸入為0,則程序會出現(xiàn)異常突然退出,并伴隨一堆錯(cuò)誤信息,如下所示:Traceback(mostrecentcalllast):File"C:/Users/ws/PycharmProjects/untitled1/ws.py",line3,in<module>bmi=round((weight/(height*height)),2)ZeroDivisionError:floatdivisionbyzero引例下面的代碼根據(jù)用戶輸入的身高和體重?cái)?shù)據(jù)計(jì)算用戶的體重系數(shù)9.1錯(cuò)誤和異常9.1.1語法錯(cuò)誤語法錯(cuò)誤,也稱作解析錯(cuò)誤,也許是學(xué)習(xí)Python過程中最常見的。下面的代碼中print有拼寫錯(cuò)誤。prin("hello,world")Traceback(mostrecentcalllast):File"<pyshell#12>",line1,in<module>prin("hello,world")NameError:name'prin'isnotdefined語法分析器指出錯(cuò)誤行為第1行,因?yàn)閜rint少了一個(gè)“t”。錯(cuò)誤會輸出文件名和行號,所以如果是從腳本輸入的你就知道去哪里檢查錯(cuò)誤了。這類錯(cuò)誤需要編程者自己不斷提高編輯和編程水平來減少發(fā)生的頻率,而不能指望Python系統(tǒng)幫我們解決。9.1錯(cuò)誤和異常9.1.1語法錯(cuò)誤9.1錯(cuò)誤和異常9.1.2異常即使一條語句或表達(dá)式在語法上是正確的,當(dāng)試圖執(zhí)行它時(shí)也可能會引發(fā)錯(cuò)誤。運(yùn)行期檢測到的錯(cuò)誤即為異常。>>>20*(10/0)Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>20*(10/0)ZeroDivisionError:divisionbyzero以上代碼出現(xiàn)除數(shù)為0的異常。>>>20+mycarTraceback(mostrecentcalllast):File"<pyshell#16>",line1,in<module>20+mycarNameError:name'mycar'isnotdefined9.1錯(cuò)誤和異常9.1.2異常9.1錯(cuò)誤和異常異常名稱描述BaseException所有異常的基類KeyboardInterrupt用戶中斷執(zhí)行(通常是輸入^C)Exception常規(guī)錯(cuò)誤的基類ArithmeticError所有數(shù)值計(jì)算錯(cuò)誤的基類FloatingPointError浮點(diǎn)計(jì)算錯(cuò)誤OverflowError數(shù)值運(yùn)算超出最大限制ZeroDivisionError除(或取模)零(所有數(shù)據(jù)類型)IOError輸入/輸出操作失敗IndexError序列中沒有此索引(index)KeyError映射中沒有這個(gè)鍵MemoryError內(nèi)存溢出錯(cuò)誤(對于Python解釋器不是致命的)NameError未聲明/初始化對象(沒有屬性)9.1錯(cuò)誤和異常異常名稱描述BaseException所有9.2異常處理9.2異常處理為了使程序在發(fā)生異常時(shí)不崩潰,編程者需要按特定語法格式處理異常,使得程序可以繼續(xù)運(yùn)行。比如一個(gè)程序要求用戶輸入年齡,顯然程序期待的是一個(gè)數(shù)字,但如果用戶輸入了“ab”這樣的字符串值(用戶很容易輸入類似的數(shù)據(jù)),程序若沒有處理異常的代碼就會退出運(yùn)行,提示用戶發(fā)生了“ValueError”異常。程序這樣輕易就崩潰,將會使用戶非常惱火。合理的處理方式是,當(dāng)異常發(fā)生時(shí)程序要處理它,并提示用戶輸入正確格式的數(shù)字。9.2異常處理9.2異常處理9.2異常處理9.2.1異常處理語法異常處理語法結(jié)構(gòu)如下:
try: <body>except<ExceptionType1>: <handler1> …except<ExceptionTypeN>: <handlerN>except:#上一句except分支不指定任何類型的異常,表示可以匹配任何異常類型。
<handlerExcept>else: <process_else>finally: <process_finally>9.2異常處理9.2.1異常處理語法9.2異常處理9.2.2常見異常處理示例下面代碼處理打開文件異常。try:fh=open("testfile","r")mystr=fh.read(20)exceptIOError:print(“沒有找到文件或讀取文件失敗")else:print(mystr)fh.close()9.2異常處理9.2.2常見異常處理示例9.2異常處理執(zhí)行以上代碼,如果當(dāng)前目錄下不存在testfile這個(gè)文件,則程序產(chǎn)生異常,此異常被excepIOError分支捕獲,程序?qū)⑤敵觯簺]有找到文件或讀取文件失敗。如果文件存在,則程序會順利打開文件并執(zhí)行else分支,輸出文件中的前20個(gè)字符,然后關(guān)閉文件,程序退出。9.2異常處理9.3拋出異常和自定義異常9.3.1如何拋出異常當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),Python會自動引發(fā)異常,也可以通過raise顯式地引發(fā)異常。一旦執(zhí)行了raise語句,raise后面的語句將不能執(zhí)行。換句話說,raise語句允許程序員在任何必要的時(shí)候強(qiáng)制拋出一個(gè)指定的異常,而不必等Python引發(fā)。語法格式如下:raiseexceptionName即只要在raise關(guān)鍵字后跟上一個(gè)異常類型名,就可立即引發(fā)一個(gè)異常,改變程序的執(zhí)行路徑。9.3拋出異常和自定義異常9.3.1如何拋出異常9.3拋出異常和自定義異常9.3.2用戶自定義異常用戶可以自己創(chuàng)建異常。Python中異常是類,創(chuàng)建異常,就是創(chuàng)建一個(gè)異常子類。通過繼承,將異常類的所有基本特點(diǎn)保留下來。通過這種方式,程序可以命名它們自己的異常。自定義異常是通過擴(kuò)展BaseException類或BaseException的子類來定義一個(gè)新的異常。BaseException類是所有異常類的父親,所有的Python異常類都直接或間接地繼承自BaseException類。9.3拋出異常和自定義異常9.3.2用戶自定義異常定義異常類的語法:classMyException(Exception):passMyException是自定義異常類名,Exception是異?;?。定義異常類的語法:本章小結(jié)
本章介紹了一些常見的異常類型及異常處理方法,簡單說明了如何手動拋出異常、自定義異常等知識點(diǎn)。通過本章的學(xué)習(xí),讀者要理解錯(cuò)誤與異常的區(qū)別和聯(lián)系,理解異常處理與程序健壯性的關(guān)系,掌握處理常見異常的一般方法和原則。本章小結(jié)
本章介紹了一些常見的異常類型及異常處理方法,第9章異常和異常處理第9章異常和異常處理內(nèi)容提綱9.1文件和文件路徑
29.2文件的讀寫39.3文件定位4359.4文件相關(guān)函數(shù)及綜合應(yīng)用19.5CSV文件操作內(nèi)容提綱9.1文件和文件路徑29.2文件的讀寫39引例在前面的上機(jī)實(shí)踐過程中,讀者可能遇到過很多錯(cuò)誤或異常。錯(cuò)誤一般指語法錯(cuò)誤,通常是由于我們沒有正確掌握語法或輸入代碼過程中出錯(cuò)而造成的。這需要編程者自己盡力在編碼和輸入過程中避免。異常即是一個(gè)事件。該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行。引例在前面的上機(jī)實(shí)踐過程中,讀者可能遇到過很多錯(cuò)誤或引例下面的代碼根據(jù)用戶輸入的身高和體重?cái)?shù)據(jù)計(jì)算用戶的體重系數(shù)BMI。>>>height=float(input("enteryourheight(m):"))>>>weight=float(input("enteryourweight(kg):"))>>>bmi=round((weight/(height*height)),2)>>>print("yourBMIis:",bmi)程序要求輸入合理的數(shù)據(jù),一旦用戶誤將身高數(shù)據(jù)輸入為0,則程序會出現(xiàn)異常突然退出,并伴隨一堆錯(cuò)誤信息,如下所示:Traceback(mostrecentcalllast):File"C:/Users/ws/PycharmProjects/untitled1/ws.py",line3,in<module>bmi=round((weight/(height*height)),2)ZeroDivisionError:floatdivisionbyzero引例下面的代碼根據(jù)用戶輸入的身高和體重?cái)?shù)據(jù)計(jì)算用戶的體重系數(shù)9.1錯(cuò)誤和異常9.1.1語法錯(cuò)誤語法錯(cuò)誤,也稱作解析錯(cuò)誤,也許是學(xué)習(xí)Python過程中最常見的。下面的代碼中print有拼寫錯(cuò)誤。prin("hello,world")Traceback(mostrecentcalllast):File"<pyshell#12>",line1,in<module>prin("hello,world")NameError:name'prin'isnotdefined語法分析器指出錯(cuò)誤行為第1行,因?yàn)閜rint少了一個(gè)“t”。錯(cuò)誤會輸出文件名和行號,所以如果是從腳本輸入的你就知道去哪里檢查錯(cuò)誤了。這類錯(cuò)誤需要編程者自己不斷提高編輯和編程水平來減少發(fā)生的頻率,而不能指望Python系統(tǒng)幫我們解決。9.1錯(cuò)誤和異常9.1.1語法錯(cuò)誤9.1錯(cuò)誤和異常9.1.2異常即使一條語句或表達(dá)式在語法上是正確的,當(dāng)試圖執(zhí)行它時(shí)也可能會引發(fā)錯(cuò)誤。運(yùn)行期檢測到的錯(cuò)誤即為異常。>>>20*(10/0)Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>20*(10/0)ZeroDivisionError:divisionbyzero以上代碼出現(xiàn)除數(shù)為0的異常。>>>20+mycarTraceback(mostrecentcalllast):File"<pyshell#16>",line1,in<module>20+mycarNameError:name'mycar'isnotdefined9.1錯(cuò)誤和異常9.1.2異常9.1錯(cuò)誤和異常異常名稱描述BaseException所有異常的基類KeyboardInterrupt用戶中斷執(zhí)行(通常是輸入^C)Exception常規(guī)錯(cuò)誤的基類ArithmeticError所有數(shù)值計(jì)算錯(cuò)誤的基類FloatingPointError浮點(diǎn)計(jì)算錯(cuò)誤OverflowError數(shù)值運(yùn)算超出最大限制ZeroDivisionError除(或取模)零(所有數(shù)據(jù)類型)IOError輸入/輸出操作失敗IndexError序列中沒有此索引(index)KeyError映射中沒有這個(gè)鍵MemoryError內(nèi)存溢出錯(cuò)誤(對于Python解釋器不是致命的)NameError未聲明/初始化對象(沒有屬性)9.1錯(cuò)誤和異常異常名稱描述BaseException所有9.2異常處理9.2異常處理為了使程序在發(fā)生異常時(shí)不崩潰,編程者需要按特定語法格式處理異常,使得程序可以繼續(xù)運(yùn)行。比如一個(gè)程序要求用戶輸入年齡,顯然程序期待的是一個(gè)數(shù)字,但如果用戶輸入了“ab”這樣的字符串值(用戶很容易輸入類似的數(shù)據(jù)),程序若沒有處理異常的代碼就會退出運(yùn)行,提示用戶發(fā)生了“ValueError”異常。程序這樣輕易就崩潰,將會使用戶非常惱火。合理的處理方式是,當(dāng)異常發(fā)生時(shí)程序要處理它,并提示用戶輸入正確格式的數(shù)字。9.2異常處理9.2異常處理9.2異常處理9.2.1異常處理語法異常處理語法結(jié)構(gòu)如下:
try: <body>except<ExceptionType1>: <handler1> …except<ExceptionTypeN>: <handlerN>except:#上一句except分支不指定任何類型的異常,表示可以匹配任何異常類型。
<handlerExcept>else: <process_else>finally: <process_finally>9.2異常處理9.2.1異常處理語法9.2異常處理9.2.2常見異常處理示例下面代碼處理打開文件異常。try:fh=open("testfile","r")mystr=fh.read(20)exceptIOError:print(“沒有找到文件或讀取文件失敗")else:print(mystr)fh.close()9.2異常處理9.2.2常見異常處理示例9.2異常處理執(zhí)行以上代碼,如果當(dāng)前目錄下不存在testfile這個(gè)文件,則程序產(chǎn)生異常,此異常被excepIOError分支捕獲,程序?qū)⑤敵觯簺]有找到文件或讀取文件失敗。如果文件存在,則程序會順利打開文件并執(zhí)行else分支,輸出文件中的前20個(gè)字符,然后關(guān)閉文件,程序退出。9.2異常處理9.3拋出異常和自定義異常9.3.1如何拋出異常當(dāng)程序出現(xiàn)錯(cuò)誤時(shí),Python會自動引發(fā)異常,也可以
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年成人高考語文經(jīng)典題型作文語言表達(dá)全真模擬試卷
- 2025年消防員基礎(chǔ)知識測試題庫:消防隊(duì)伍管理與消防設(shè)施操作規(guī)程解析試題
- 農(nóng)村婦幼保健知識重點(diǎn)解析-2025年鄉(xiāng)村醫(yī)生考試題庫精講
- 2025年成人高考語文經(jīng)典題型強(qiáng)化題庫:語文閱讀理解專項(xiàng)訓(xùn)練試題匯編
- 2025年專升本藝術(shù)概論模擬試卷:藝術(shù)作品賞析技巧深度剖析
- 2025年書法教師職業(yè)能力測試卷:書法教學(xué)跨學(xué)科融合與應(yīng)用試題
- 2025年葡萄牙語能力測試試卷閱讀理解能力提升訓(xùn)練
- 2025年成人高考《語文》語言表達(dá)與運(yùn)用能力測評試卷
- 2025年征信考試題庫:征信國際合作與交流法律知識試題集
- 2025年網(wǎng)絡(luò)工程師職業(yè)技能測試卷:網(wǎng)絡(luò)工程師職場溝通與團(tuán)隊(duì)協(xié)作試題
- 【MOOC期末】《英美文學(xué)里的生態(tài)》(北京林業(yè)大學(xué))期末中國大學(xué)慕課MOOC答案
- 2024年六西格瑪黃帶認(rèn)證考試練習(xí)題庫(含答案)
- 中國心力衰竭診斷和治療指南2024解讀(完整版)
- 古村落鄉(xiāng)村文化旅游古鎮(zhèn)旅游外文文獻(xiàn)翻譯2014年
- 壓瘡指南解讀
- 空分裝置增壓機(jī)大修方案
- 2021年中國華電集團(tuán)公司組織架構(gòu)和部門職能
- 變電所倒閘操作課件
- 六層框架住宅畢業(yè)設(shè)計(jì)計(jì)算書2
- 膽汁淤積和自身免疫性肝病診治專家共識參考教學(xué)提綱
- 光纜的敷設(shè)方法與要求
評論
0/150
提交評論