Python程序設(shè)計(jì)課件第10章錯(cuò)誤及異常處理_第1頁(yè)
Python程序設(shè)計(jì)課件第10章錯(cuò)誤及異常處理_第2頁(yè)
Python程序設(shè)計(jì)課件第10章錯(cuò)誤及異常處理_第3頁(yè)
Python程序設(shè)計(jì)課件第10章錯(cuò)誤及異常處理_第4頁(yè)
Python程序設(shè)計(jì)課件第10章錯(cuò)誤及異常處理_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具第十章 錯(cuò)誤及異常處理參考書(shū)目Python 程序設(shè)計(jì)錯(cuò)誤與異常第十章 錯(cuò)誤及異常處理參考書(shū)目Python 程序目錄錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具這里說(shuō)明圖片內(nèi)容 目錄錯(cuò)誤與異常這里說(shuō)明圖片內(nèi)容 錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具目錄這里說(shuō)明圖片內(nèi)容 錯(cuò)誤與異常目錄這里說(shuō)明圖片內(nèi)容 錯(cuò)誤與異常1 兩種類(lèi)型的錯(cuò)誤不管那種錯(cuò)誤,只要被Python檢測(cè)到,程序都會(huì)發(fā)生異常1.語(yǔ)法錯(cuò)誤語(yǔ)法錯(cuò)誤是指軟件的編寫(xiě)不符合Python語(yǔ)言的語(yǔ)法規(guī)定,導(dǎo)

2、致無(wú)法被解釋器解釋或編譯器編譯。2邏輯錯(cuò)誤程序運(yùn)行以后出現(xiàn)的錯(cuò)誤就是邏輯錯(cuò)誤,邏輯錯(cuò)誤可能是由于外界條件引起的(比如網(wǎng)絡(luò)斷開(kāi)、文件格式損壞、輸入字符串格式不正確等),也可能是程序本身設(shè)計(jì)不嚴(yán)謹(jǐn)導(dǎo)致的,比如0作為除法。錯(cuò)誤與異常1 兩種類(lèi)型的錯(cuò)誤不管那種錯(cuò)誤,只要被Python錯(cuò)誤與異常2 什么是異常當(dāng)Python檢測(cè)到一個(gè)錯(cuò)誤時(shí),解釋器就會(huì)指出當(dāng)前流已無(wú)法繼續(xù)執(zhí)行下去,這時(shí)候就是出現(xiàn)了異常。異常分為兩個(gè)階段:引起異常發(fā)生的錯(cuò)誤檢測(cè)并進(jìn)行處理的階段第一個(gè)階段第二個(gè)階段錯(cuò)誤與異常2 什么是異常當(dāng)Python檢測(cè)到一個(gè)錯(cuò)誤時(shí),解錯(cuò)誤與異常2 什么是異常異常的5種用途:錯(cuò)誤處理事件通知特殊情況處理終止

3、行為非常規(guī)控制流程錯(cuò)誤與異常2 什么是異常異常的5種用途:錯(cuò)誤處理事件通知特錯(cuò)誤與異常2 什么是異常在Python中常使用異常對(duì)象來(lái)表示不同的異常,并已經(jīng)為常見(jiàn)的異常建立了異常類(lèi)。異常類(lèi)名描 述BaseException所有異常的基類(lèi)Exception常規(guī)錯(cuò)誤的基類(lèi)NameError嘗試訪問(wèn)一個(gè)沒(méi)有申明的變量IndentationError縮進(jìn)錯(cuò)誤ZeroDivisionError除數(shù)為0SyntaxError語(yǔ)法錯(cuò)誤IndexError索引超出序列范圍KeyError映射不存在的(字典)鍵IOError輸入輸出錯(cuò)誤(比如你要讀的文件不存在)AttributeError嘗試訪問(wèn)未知的對(duì)象屬性V

4、alueError傳給函數(shù)的參數(shù)類(lèi)型不正確TypeError將變量類(lèi)型不同相符的值賦給變量時(shí)EOFError發(fā)現(xiàn)一個(gè)不期望的文件尾錯(cuò)誤與異常2 什么是異常在Python中常使用異常對(duì)象來(lái)表錯(cuò)誤與異常3 常見(jiàn)的錯(cuò)誤與異常1.缺少冒號(hào)引起的錯(cuò)誤。2.將比較運(yùn)算符“=”與賦值運(yùn)算符“=”混淆。3.代碼結(jié)構(gòu)的縮進(jìn)錯(cuò)誤。4.修改元組和字符串值時(shí)報(bào)錯(cuò)。5.連接字符串和非字符串。6.在字符串首尾忘記加引號(hào)。錯(cuò)誤與異常3 常見(jiàn)的錯(cuò)誤與異常1.缺少冒號(hào)引起的錯(cuò)誤。錯(cuò)誤與異常3 常見(jiàn)的錯(cuò)誤與異常7.變量或函數(shù)名拼寫(xiě)錯(cuò)誤。8.使用關(guān)鍵字作為變量名。9.引用超過(guò)列表最大值索引值。10.變量沒(méi)有初始化值時(shí),參與運(yùn)算引起

5、錯(cuò)誤。11.誤使用自增和自減運(yùn)算符。12.在定義類(lèi)時(shí),忘記為方法的第一個(gè)參數(shù)添加self參數(shù)。錯(cuò)誤與異常3 常見(jiàn)的錯(cuò)誤與異常7.變量或函數(shù)名拼寫(xiě)錯(cuò)誤。錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具目錄這里說(shuō)明圖片內(nèi)容 錯(cuò)誤與異常目錄這里說(shuō)明圖片內(nèi)容 捕獲和處理異常當(dāng)程序出現(xiàn)異常時(shí),Python默認(rèn)的異常處理行為將開(kāi)始工作,它會(huì)停止程序并打印出錯(cuò)誤消息。但這往往并不是我們想要的。例如,服務(wù)器程序一般需要在內(nèi)部錯(cuò)誤發(fā)生時(shí)依然保持工作。如果不希望使用默認(rèn)的異常處理行為,就需要把調(diào)用包裝在try語(yǔ)句中,自行捕捉異常。異常由四個(gè)相關(guān)語(yǔ)句進(jìn)行處理:tryexceptelsef

6、inally檢測(cè)異常捕獲異常捕獲和處理異常當(dāng)程序出現(xiàn)異常時(shí),Python默認(rèn)的異常處理行捕獲和處理異常1 try.except.語(yǔ)句try:可能會(huì)出錯(cuò)的代碼except 錯(cuò)誤類(lèi)型:出錯(cuò)后的處理語(yǔ)句try-except語(yǔ)句定義了監(jiān)控異常的一段代碼,并提供了處理異常的機(jī)制。捕獲和處理異常1 try.except.語(yǔ)句try:捕獲和處理異常2 tryexceptelse語(yǔ)句如果try范圍內(nèi)捕獲了異常,就執(zhí)行except塊;如果try范圍內(nèi)沒(méi)有捕獲異常,就執(zhí)行else塊。捕獲和處理異常2 tryexceptelse語(yǔ)句如果捕獲和處理異常3 帶有多個(gè)except的try語(yǔ)句try: # 語(yǔ)句塊excep

7、t 異常名稱(chēng)1: # 異常處理代碼1except異常名稱(chēng)2: # 異常處理代碼 處理多個(gè)異常的try-except語(yǔ)句格式如下: 捕獲和處理異常3 帶有多個(gè)except的try語(yǔ)句try:捕獲和處理異常4 捕獲所有異常BaseException是所有內(nèi)建異常的基類(lèi),通過(guò)它可以捕獲所有類(lèi)型的異常,Keyboardlnterrupt,SystemExit和Exception是從它直接派生出來(lái)的子類(lèi)。程序需要捕獲所有異常時(shí),可以使用BaseException。try: x = float(input(請(qǐng)輸入被除數(shù):) y = float(input(請(qǐng)輸入除數(shù):) z = x / yexcept B

8、aseException as e: print(e)else:print(z)捕獲和處理異常4 捕獲所有異常BaseException是捕獲和處理異常5 finally子句try:可能會(huì)出錯(cuò)的語(yǔ)句finally:無(wú)論是否出錯(cuò)都會(huì)執(zhí)行的語(yǔ)句Finally子句與try語(yǔ)句聯(lián)合使用,表示無(wú)論try語(yǔ)句是否出錯(cuò)都會(huì)執(zhí)行語(yǔ)句。在程序中,無(wú)論是否捕捉到異常,都必須要執(zhí)行某件事情,例如關(guān)閉文件、釋放鎖等,這時(shí)可以提供finally語(yǔ)句處理。通常情況下,finally用于釋放資源。捕獲和處理異常5 finally子句try:Finally捕獲和處理異常5 finally子句try:可能會(huì)出現(xiàn)異常的語(yǔ)句塊Ex

9、cept A:異常發(fā)生后的處理Except B:異常發(fā)生后的處理except:其他異常發(fā)生后的處理else:異常未發(fā)生后的執(zhí)行語(yǔ)句finally:無(wú)論異常是否發(fā)生都會(huì)執(zhí)行的語(yǔ)句??傉Z(yǔ)法結(jié)構(gòu):所出現(xiàn)的順序必須是try-except X-except-else-finally捕獲和處理異常5 finally子句try:總語(yǔ)法結(jié)構(gòu):所錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具目錄這里說(shuō)明圖片內(nèi)容 錯(cuò)誤與異常目錄這里說(shuō)明圖片內(nèi)容 處理異常的特殊方法1 raise語(yǔ)句拋出異常在Python中,raise語(yǔ)句用于拋出特定的異常,其語(yǔ)法格式如下:如果捕獲到的異常在本級(jí)無(wú)法處

10、理,或者不應(yīng)該由本級(jí)處理,也可以將異常拋出,交給上一級(jí)代碼處理等方式。raise Exception , args , tracebackException是異常的類(lèi)型(例如,NameError)參數(shù)是一個(gè)異常參數(shù)值。該參數(shù)是可選的,如果不提供,異常的參數(shù)是None。最后一個(gè)參數(shù)是可選的(在實(shí)踐中很少使用),是跟蹤異常對(duì)象。處理異常的特殊方法1 raise語(yǔ)句拋出異常在Python處理異常的特殊方法1 raise語(yǔ)句拋出異常Python 3.0(而不是2.6)也允許raise語(yǔ)句擁有一個(gè)可選的from子句。raise exception from otherexception使用raise.f

11、rom可以在異常中拋出另外的異常。 try: numexcept Exception as exception: raise IndexError(下標(biāo)超出范圍) from exceptiontry里面只定義了變量num,會(huì)引發(fā)NameError異常。except子句使用raise.from 拋出NameError異常后再拋出“下標(biāo)越界”的異常。 處理異常的特殊方法1 raise語(yǔ)句拋出異常Python 2 assert語(yǔ)句判定用戶定義的約束條件Assert斷言語(yǔ)句用于判斷一個(gè)表達(dá)式是否為真,如果表達(dá)式為T(mén)rue,則不作任何操作,如果為False則會(huì)引發(fā)AssertionError異常。ass

12、ert 邏輯表達(dá)式,data if not 邏輯表達(dá)式: raise AssertionError(data)assert后面緊跟一個(gè)邏輯表達(dá)式,相當(dāng)于條件。Data通常是一個(gè)字符串,當(dāng)條件為false時(shí)作為異常的描述信息。try:assert 1 = 2 , 1 is not equal 2!except AssertionError as reason:print(%s:%s%(reason._class_._name_, reason)AssertionError:1 is not equal 2!2 assert語(yǔ)句判定用戶定義的約束條件Assert斷言語(yǔ)處理異常的特殊方法3 with

13、as語(yǔ)句With語(yǔ)句適用于對(duì)資源進(jìn)行訪問(wèn)的場(chǎng)合,無(wú)論資源使用過(guò)程是否發(fā)生異常,都會(huì)執(zhí)行必要的釋放資源的操作,比如文件使用后的自動(dòng)關(guān)閉、線程中鎖的自動(dòng)獲取和釋放等。with 上下文表達(dá)式 as 資源對(duì)象:對(duì)對(duì)象的操作with open(c: temp.txt) as f:for line in f:print(line)程序運(yùn)行結(jié)果如下:人生苦短,我只用Python!處理異常的特殊方法3 withas語(yǔ)句With語(yǔ)句適用于處理異常的特殊方法4 自定義異常創(chuàng)建一個(gè)繼承Exception類(lèi)的子類(lèi),就是自定義異常類(lèi)。當(dāng)遇到自己設(shè)定的錯(cuò)誤時(shí),使用raise語(yǔ)句拋出自定義的異常。 【例】創(chuàng)建一個(gè)類(lèi),基類(lèi)為

14、BaseException,用于在異常觸發(fā)時(shí)輸出更多的信息的自定義異常處理示例。class Networkerror(BaseException): def _init_(self,msg): self.msg=msg def _str_(self): return self.msgtry: raise Networkerror(類(lèi)型錯(cuò)誤)except Networkerror as e: print(e)處理異常的特殊方法4 自定義異常創(chuàng)建一個(gè)繼承Exceptio錯(cuò)誤與異常捕獲和處理異常處理異常的特殊方法PyCharm中使用debug工具目錄錯(cuò)誤與異常目錄PyCharm中使用debug工具5

15、 PyCharm中使用debug工具斷點(diǎn)調(diào)試是在開(kāi)發(fā)過(guò)程中常用的功能,能清楚看到代碼運(yùn)行的過(guò)程,有利于代碼問(wèn)題跟蹤。pycharm調(diào)試程序的過(guò)程如下:1.打斷點(diǎn):左鍵點(diǎn)擊行號(hào)右邊出現(xiàn)一個(gè)紅色圓點(diǎn)標(biāo)志為斷點(diǎn),再次點(diǎn)擊取消斷點(diǎn)PyCharm中使用debug工具5 PyCharm中使用dPyCharm中使用debug工具5 PyCharm中使用debug工具2.右鍵點(diǎn)擊編輯區(qū),點(diǎn)擊Debug按鈕;或在工具欄選擇運(yùn)行的文件,點(diǎn)Debug圖標(biāo)按鈕PyCharm中使用debug工具5 PyCharm中使用dPyCharm中使用debug工具5 PyCharm中使用debug工具3.顯示出Debug控制臺(tái)。

16、控制臺(tái)有兩個(gè)顯示的面板:Debugger和console。Debugger用于顯示變量和變量的細(xì)節(jié),Console用于輸出內(nèi)容。PyCharm中使用debug工具5 PyCharm中使用dPyCharm中使用debug工具5 PyCharm中使用debug工具4.點(diǎn)擊Step Over按鈕開(kāi)始單步調(diào)試,每點(diǎn)擊一次,跳一步。并在解釋區(qū)顯示內(nèi)容。5.點(diǎn)擊完最后一步,解釋區(qū)也清空。整個(gè)過(guò)程能清楚的看到代碼的運(yùn)行位置。PyCharm中使用debug工具5 PyCharm中使用dPyCharm中使用debug工具5 PyCharm中使用debug工具6.接下來(lái),針對(duì)console界面的調(diào)試。重新運(yùn)行調(diào)試程序,點(diǎn)擊console,更換至輸出數(shù)據(jù)面板。點(diǎn)擊Step Over步步執(zhí)行代碼。7.最后一步,將顯示信息:Process finished with exit code 0。整個(gè)調(diào)試過(guò)程結(jié)束。PyCharm中使用debug工具5 PyCha

溫馨提示

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

評(píng)論

0/150

提交評(píng)論