第五章 輸入輸出處理(下)_第1頁
第五章 輸入輸出處理(下)_第2頁
第五章 輸入輸出處理(下)_第3頁
第五章 輸入輸出處理(下)_第4頁
第五章 輸入輸出處理(下)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、15.4 異常異常異常5.4異常異常5.4.1 簡介1.為什么要使用異常2.異常的角色5.4.2 異常處理1.默認異常處理器2.捕獲處理異常tryexceptelsefinally語句3.引發異常2異常5.4.1 簡介簡介n程序運行時所發生的各種錯誤,即為異常(Exceptions)。n異常發生后,該異常被一種叫做異常處理的機制捕捉到了,該機制因此做出了反應:輸出了出錯的提示,甚至強制中止了程序的運行,這意味著,該異常已經被處理了。3異常5.4.1 簡介簡介n為什么要使用異常?1.提供錯誤信息,讓使用者能夠對錯誤進行定位(錯誤原因、錯誤方位)2.程序設計者自己設計異常處理器,給最終用戶更為友好

2、的提示信息,幫助用戶按實際需要正確處理已經發生的錯誤。4異常5.4.1 簡介簡介n異常/錯誤的種類1.語法錯誤(Syntax Error):最易定位、改正。2.運行時錯誤(Run time Error):較難定位,異常設計的主要目標。3.邏輯錯誤(Logical Error):最難發現。5異常5.4.1 簡介簡介n異常(處理)的角色1.錯誤處理(主要角色)2.事件通知3.特殊情況處理4.終止行為(打掃戰場,免除后患)6異常5.4.2 異常處理異常處理1.默認異常處理器2.捕獲、處理異常語句tryexceptelsefinally7異常5.4.2 異常處理異常處理1.默認異常處理器:所在地:Py

3、thon系統自身的異常處理器啟動時機:程序中的異常處理代碼無法捕捉處理所發生的異常時處理動作:終止程序的運行輸出標準、專業的出錯信息異常名稱及異常說明“堆棧跟蹤”信息:異常發生時激活的程序行和程序調用清單8異常5.4.2 異常處理異常處理1.默認異常處理器舉例默認異常處理器舉例 Python Python環境命令行狀態下:環境命令行狀態下: for i in range(1,5)for i in range(1,5) File , line 1 File , line 1 for i in range(1,5) for i in range(1,5) SyntaxError: invalid

4、syntaxSyntaxError: invalid syntax9箭頭指向錯誤行末尾處,未發現預期的冒號錯誤類名稱錯誤信息用回車結束的語句錯誤所在的文件及行號錯誤的行 for1 i in range(1,5) for1 i in range(1,5) File , line 1 File , line 1 for1 i in range(1,5) for1 i in range(1,5) SyntaxError: invalid SyntaxError: invalid syntaxsyntax for1 + i for1 + iTraceback (most recent call las

5、t):Traceback (most recent call last): File , line 1, in File , line 1, in NameError: name for1 is not definedNameError: name for1 is not defined10箭頭指向 i ,說明到了 i ,才能發覺錯誤語法錯誤的真正錯處,往往是在箭頭所指的前面,甚至是前面一行沒有一個名稱叫做for1的東西被定義過異常5.4.2 異常處理異常處理1.默認異常處理器舉例 程序文件運行狀態下:11Default_excep.pyDefault_excep.py源程序:源程序:#Fil

6、ename:Default_excep#Filename:Default_exceps = input(s = input(輸入一些東西輸入一些東西- )- )print(OK!)print(OK!)print(print(你輸入的是你輸入的是:+s):+s)12DOSDOS窗口中窗口中的的運行過程:運行過程:C C:mypythonpython Default_excep.py:mypythonpython Default_excep.py輸入一些東西輸入一些東西- Z- ZTraceback (most recent call last):Traceback (most recent ca

7、ll last): File Default_excep.py, line 2, in File Default_excep.py, line 2, in s = input( s = input(輸入一些東西輸入一些東西- )- )EOFErrorEOFError異常5.4.2 異常處理異常處理2.捕獲、處理異常語句tryexceptelsefinally所在地:源程序內啟動時機:發生異常時先于默認異常處理器啟動,如果已經捕捉到的異常,該異常不會再自動被上傳至頂層默認異常處理器。處理動作:可按實際應用的需求編寫try子句塊:塊內語句執行時如果發生異常,則自動拋出異常。except子句塊:匹配

8、捕捉try子句拋出的異常,并處理異常。13異常5.4.2 異常處理異常處理捕獲、處理異常語句tryexcept14except-input1.pyexcept-input1.py源程序:源程序:# #Filename:except-input1Filename:except-input1import sysimport systry:try: s = input( s = input(輸入一些東西輸入一些東西- )- )except EOFError:except EOFError: print( print(你為何在此輸入你為何在此輸入Ctrl+Z Ctrl+Z ?。堪??) sys.exit

9、() # sys.exit() #退出程序退出程序except:except: print( print(你到底在干什么?。磕愕降自诟墒裁窗。? sys.exit() # sys.exit() #退出程序退出程序 print(OK!)print(OK!)print(print(你輸入的是你輸入的是:+s):+s)可能發生異常的語句,會拋出異常匹配異常名,捕捉異常已匹配異常的處理語句捕捉其它所有捕捉其它所有異常名,慎用!異常名,慎用!退出try后的語句15運行程序運行程序except-input1.pyexcept-input1.py:C:mypythonpython except-input1

10、.pyC:mypythonpython except-input1.py輸入一些東西輸入一些東西- Z- Z你為何在此輸入你為何在此輸入Ctrl+Z Ctrl+Z ??????修改后源程序修改后源程序except-input2.pyexcept-input2.py(重新獲得數據):(重新獲得數據):#Filename:except-input2#Filename:except-input2while True:while True: try: try: s = input( s = input(輸入一些東西輸入一些東西- )- ) break break except EOFError: exce

11、pt EOFError: print( print(你為何在此輸入你為何在此輸入Ctrl+Z Ctrl+Z ???請重新輸入!啊?請重新輸入!)print(OK!)print(OK!)print(print(你輸入的是你輸入的是:+s):+s)異常處理后重新獲得數據無異常發生則退出循環16運行修改后的程序:運行修改后的程序:except-input2.pyexcept-input2.pyC:mypythonpython except-input2.pyC:mypythonpython except-input2.py輸入一些東西輸入一些東西- Z- Z你為何在此輸入你為何在此輸入Ctrl+Z C

12、trl+Z ?。空堉匦螺斎?!?。空堉匦螺斎?!輸入一些東西輸入一些東西- Z- Z你為何在此輸入你為何在此輸入Ctrl+Z Ctrl+Z 啊?請重新輸入!???請重新輸入!輸入一些東西輸入一些東西- Thank you!- Thank you!OK!OK!你輸入的是你輸入的是:Thank you!:Thank you!第2次出錯總算正確了異常5.4.2 異常處理異常處理2.捕獲、處理異常語句ntryexcept中附加的else子句u功能:當try子句塊中的語句塊執行時沒有發生任何異常,else子句中的語句塊就會被接著執行,然后退出整個try語句,接著執行try語句后面的語句。u作用:在此處將無異常

13、發生的正常情況標志位傳遞給退出try后要執行的語句。u注意:else和單獨的except的區別。17異常5.4.2 異常處理異常處理tryexcept中附加的else子句18修改修改except-input2.pyexcept-input2.py,另存為,另存為except-input3.pyexcept-input3.py,源程序,源程序#Filename:except-input3while True: try: s = input(輸入一些東西- ) except EOFError: print(你為何在此輸入Ctrl+Z ???請重新輸入!) else: breakprint(OK!)p

14、rint(你輸入的是:+s)無異常,則退出重新獲得數據的循環異常5.4.2 異常處理異常處理2.捕獲、處理異常語句ntryexcept中附加的finally子句u功能:不管try子句中的語句是否發生了異常、不管except子句是否捕捉到了匹配的異常、是否對異常進行了處理,也不管是否程序會因此被終止,都會執行finally子句中的語句塊。u作用:執行至關重要的收拾殘局、打掃戰場的結尾善后工作。195.4.2 異常處理異常處理tryexcept中附加的finally子句20except-finally1.pyexcept-finally1.py,源程序,源程序# Filename: except-

15、finally1.pyimport timetry: f = open(poem.txt) while True: # 常用的讀取文件的習慣 line = f.readline() if len(line) = 0: break time.sleep(2) print(line,end=)finally: f.close() print(nn最終任務已經完成,文件被關閉了!)print(正常結束!)不管是否發生異常,都要關閉已打開的文件事先準備好poem.txt21except-finally1.pyexcept-finally1.py正常執行結果正常執行結果C:mypythonpython

16、except-finally1.py當你用你的智慧編寫了你自己喜歡的有用的程序,你會發覺這是一種美好的自我享受。當你的作品在別人手中爭相傳遞,你的內心會升騰起無以言表的喜悅!最終任務已經完成,文件被關閉了!正常結束!運行時,用戶按了終止程序運行時,用戶按了終止程序 Ctrl+CCtrl+C,發生異常的,發生異常的情況情況C:mypythonpython except-finally1.py當你用你的智慧編寫了你自己喜歡的有用的程序,最終任務已經完成,文件被關閉了!Traceback (most recent call last): File except-finally1.py, line 9

17、, in time.sleep(2)KeyboardInterrupt無異常發生,關無異常發生,關閉文件成功!閉文件成功!try拋出了異常,但沒有相匹配的拋出了異常,但沒有相匹配的except捕捕捉,異常上傳至捉,異常上傳至默認異常處理器默認異常處理器!異常發生,但異常發生,但finally子句塊仍然被執行子句塊仍然被執行22修改為捕捉修改為捕捉Ctrl+CCtrl+C,另存為,另存為except-finally2.pyexcept-finally2.py源程序源程序# Filename: except-finally2.pyimport timeimport systry: f = open

18、(poem.txt) while True: # 常用的讀取文件的習慣 line = f.readline() if len(line) = 0: break time.sleep(2) print(line,end=)except KeyboardInterrupt: print(你是如此的沒有耐心,按了Ctrl+C,程序被你中斷了!) sys.exit()finally: f.close() print(nn最終任務已經完成,文件被關閉了!)print(正常結束!)捕捉捕捉Ctrl+C引發的異常引發的異常異常發生,但異常發生,但finally子句塊仍然要被執行子句塊仍然要被執行23exce

19、pt-finally2.pyexcept-finally2.py運行過程中按運行過程中按Ctrl+CCtrl+CC:mypythonpython except-finally2.py當你用你的智慧編寫了你自己喜歡的有用的程序,你會發覺這是一種美好的自我享受。你是如此的沒有耐心,按了Ctrl+C,程序被你中斷了!最終任務已經完成,文件被關閉了!Ctrl+C捕捕捉處理成功捉處理成功異常被捕捉處理異常被捕捉處理后,后,finally子句子句塊仍然執行正確塊仍然執行正確由于Ctrl+C最終由sys.exit()終止程序作為處理結果,因此看不到“正常結束”字樣異常5.4.2 異常處理異常處理3.引發(手

20、動拋出)異常raise語句u功能:顯式地拋出默認異?;蚰J異常的子類異常,供tryexcept語句捕捉處理。u作用:利用try語句的異常處理機制,把一些不會引起默認異常處理器啟動的異常,人為地制作成異常并拋出,然后由try語句來捕捉和處理。u步驟:自定義一個超類為默認異常類的子類發現異常數據,拋出自定義異常子類的實例用tryexcept語句捕捉處理24異常5.4.2 異常處理異常處理3.引發(手動拋出)異常raise語句25except-raising1.py源程序源程序# Filename: except-raising1.pyimport datetimeclass BadAgeException(Exception): 一個用戶自定義異常類. def _init_(self): Exception._init_(self) self.message=你來自未來世界嗎?連年齡都是負數 %d ! 請仔細考慮一下,重新輸入!26while True: try: yourAge = int(input(輸入你的年齡 - ) if yourAge python except-raising1.py輸入你的年齡 - 20你的年齡是 20 歲,你生于 1994 年加油!運行運行程序,用戶程序,用戶輸入非正常輸入非正常的的 -9C:mypytho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論