第8章+異常處理與程序調(diào)試_第1頁(yè)
第8章+異常處理與程序調(diào)試_第2頁(yè)
第8章+異常處理與程序調(diào)試_第3頁(yè)
第8章+異常處理與程序調(diào)試_第4頁(yè)
第8章+異常處理與程序調(diào)試_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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)介

第8章異常處理和程序調(diào)試Chap2PythonBasicDepartmentofComputerScienceandTechnologyDepartmentofUniversityBasicComputerTeachingNanjingUniversity基本概念28.1異常處理3概念:異常是一個(gè)事件,一旦程序出現(xiàn)錯(cuò)誤,該事件就會(huì)在程序執(zhí)行過(guò)程中發(fā)生,從而影響程序的正常執(zhí)行。C++、C#、Java、PHP等許多常見(jiàn)的程序設(shè)計(jì)語(yǔ)言都存在異常處理。作用:腳本發(fā)生異常時(shí),我們需要捕獲并處理它,從而增強(qiáng)程序的魯棒性和健壯性。一般程序的錯(cuò)誤類型:語(yǔ)法錯(cuò)誤、運(yùn)行錯(cuò)誤、邏輯錯(cuò)誤。Python異常類與自定義異常48.2查詢Python異常類5Python異常類>>>dir(__builtins__)['ArithmeticError','AssertionError','AttributeError','BaseException','BlockingIOError','BrokenPipeError','BufferError','BytesWarning','ChildProcessError','ConnectionAbortedError','ConnectionError','ConnectionRefusedError',…Python異常類6異常名稱描述異常名稱描述Exception常規(guī)異常的基類TypeError對(duì)類型無(wú)效的操作AttributeError該對(duì)象無(wú)此屬性ValueError傳入?yún)?shù)無(wú)效IndexError序列中無(wú)該索引ZeroDivisionError除法或者求模運(yùn)算第二個(gè)參數(shù)為0KeyError映射中無(wú)此鍵IOError輸入\輸出操作失敗NameError未初始化\聲明該對(duì)象LookupError無(wú)效數(shù)據(jù)查詢的基類SyntaxErrorPython語(yǔ)法錯(cuò)誤IndentationError縮進(jìn)錯(cuò)誤SyntaxWaring對(duì)可疑語(yǔ)法的警告TabErrorTab鍵與空格混用Python異常類7>>>2/0Traceback(mostrecentcalllast):File"<pyshell#1>",line1,in<module>2/0ZeroDivisionError:divisionbyzero>>>a/2Traceback(mostrecentcalllast):File"<pyshell#2>",line1,in<module>a/2NameError:name'a'isnotdefined“ZeroDivisionError”異常“NameError”異常為什么需要用戶自定義異常?

針對(duì)不同的任務(wù),僅使用python自帶的異常類不能滿足用戶需求。一般,如何自定義異常?8用戶自定義異常Classuser_defined(Exception):pass用戶自定義異常9?#code8_1classstrlongError(Exception):def__init__(self,leng):self.leng=leng;def__str__(self):print("密碼長(zhǎng)度"+str(self.leng)+",超過(guò)了20!")defpassword_Test():password=input("請(qǐng)輸入長(zhǎng)度小于20的密碼:")

檢測(cè)輸入的用戶密碼長(zhǎng)度是否大于指定長(zhǎng)度?如果大于,則引發(fā)用戶自定義異常。#code8_1續(xù)iflen(password)>20:raisestrlongError(len(password))else:print(password)password_Test()

用戶輸入“sdefrgthyjukiloaqswdefrgthy”,程序運(yùn)行結(jié)果如下:10請(qǐng)輸入長(zhǎng)度小于20的密碼:sdefrgthyjukiloaqswdefrgthyTraceback(mostrecentcalllast):File"D:/Python教程/code_8/code8_1.py",line25,in<module>password_Test()File"D:/Python教程/code_8/code8_1.py",line21,inpassword_TestraisestrlongError(len(password))密碼長(zhǎng)度27,超過(guò)了20!strlongError:<unprintablestrlongErrorobject>用戶自定義異常除法運(yùn)算引發(fā)“ZeroDivisionError”異常11Python中的異常處理#code8_2num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)

實(shí)驗(yàn)結(jié)果:enterthefirstnumber:2enterthesecondnumber:0Traceback(mostrecentcalllast):File"D:\Python教程\code_8\code8_2.py",line3,in<module>print(num1/num2)ZeroDivisionError:divisionbyzeroPython中的異常處理try…except捕獲“ZeroDivisionError”異常12#code8_3try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptZeroDivisionError:print('thesecondnumbercannotbezero!')用戶輸入“2”與“0”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:0thesecondnumbercannotbezero!Python中的異常處理except捕獲“ZeroDivisionError”和“ValueError”異常13#code8_6try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)except(ValueError,ZeroDivisionError):print('inputerror!')用戶輸入“2”與“0”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:0inputerror!Python中的異常處理except…as捕獲多個(gè)異常14#code8_7try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')用戶輸入“2”與“0”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:0divisionbyzerosomethingiswrong!as語(yǔ)句后可以給出提示信息!Python中的異常處理try…except…else捕獲異常15#code8_8try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')用戶輸入“2”與“4”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:40.5youareright!與if…else語(yǔ)句一樣,如果沒(méi)有異常發(fā)生,則執(zhí)行else子句。Python中的異常處理try…finally捕獲異常

16#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用戶輸入“2”與“4”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:40.5youareright!theend!不論程序是否出現(xiàn)異常,一些語(yǔ)句都必須要輸出!Python中的異常處理17#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用戶輸入“2”與“a”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:ainvalidliteralforint()withbase10:'a'somethingiswrong!theend!try…finally捕獲異常

不論程序是否出現(xiàn)異常,一些語(yǔ)句都必須要輸出!try…finally語(yǔ)句

捕獲異常

Python中的異常處理18#code8_9try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))print(num1/num2)exceptExceptionaserr:print(err)print('somethingiswrong!')else:print('youareright!')finally:print('theend!')用戶輸入“2”與“a”,程序運(yùn)行結(jié)果:enterthefirstnumber:2enterthesecondnumber:ainvalidliteralforint()withbase10:'a'somethingiswrong!theend!不論程序是否出現(xiàn)異常,一些語(yǔ)句都必須要輸出!raise語(yǔ)句拋出異常Python中的異常處理19>>>raiseNameError('sorry,erroroccurs')Traceback(mostrecentcalllast):File"<pyshell#0>",line1,in<module>raiseNameError('sorry,erroroccurs')NameError:sorry,erroroccurs用戶可以自定義觸發(fā)異常的條件或者在任意時(shí)刻運(yùn)用raise語(yǔ)句拋出異常。這里raiseNameError引發(fā)了異常,并添加錯(cuò)誤信息“sorry,erroroccurs”。用戶自定義異常20?#code8_10try:num1=int(input('enterthefirstnumber:'))num2=int(input('enterthesecondnumber:'))ifnum2==0:raiseZeroDivisionErrorexceptZeroDivisionError:print('caughttheZeroDivisionError,thesecondnumbercannotbezero')

當(dāng)除法運(yùn)算除數(shù)為0時(shí),如何捕獲raise語(yǔ)句拋出的異常。

用戶輸入“2”與“a”,程序運(yùn)行結(jié)果:enterthefirstnumber:1enterthesecondnumber:0caughttheZeroDivisionError,thesecondnumbercannotbezeroIDLE調(diào)試程序21程序?qū)崿F(xiàn)過(guò)程中會(huì)出現(xiàn)各種bug,可能是語(yǔ)法方面的,也可能是邏輯方面的。如果出現(xiàn)邏輯錯(cuò)誤,該如何檢測(cè)?

當(dāng)出現(xiàn)邏輯錯(cuò)誤時(shí),可以對(duì)程序進(jìn)行單步調(diào)試,即通過(guò)觀察程序的運(yùn)行過(guò)程以及運(yùn)行過(guò)程中變量(局部變量和全局變量)值的變化,可以快速找到引起運(yùn)行結(jié)果異常的根本原因,從而解決邏輯錯(cuò)誤。IDLE調(diào)試程序22#code8_11defbubble_sort(nums):n=len(nums)foriinrange(n-1):forjinrange(0,n-i-1):ifnums[j]>nums[j+1]:nums[j],nums[j+1]=nums[j+1],nums[j]冒泡法實(shí)現(xiàn)排序,如何用IDLE方式調(diào)試程序?#code8_11續(xù)returnnumsa=[1,9,2,6,8,4]print(bubble_sort(a))IDLE調(diào)試程序

溫馨提示

  • 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)論