Python程序設(shè)計(jì)基礎(chǔ)-Chap09-異常課件_第1頁
Python程序設(shè)計(jì)基礎(chǔ)-Chap09-異常課件_第2頁
Python程序設(shè)計(jì)基礎(chǔ)-Chap09-異常課件_第3頁
Python程序設(shè)計(jì)基礎(chǔ)-Chap09-異常課件_第4頁
Python程序設(shè)計(jì)基礎(chǔ)-Chap09-異常課件_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論