版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備監(jiān)理師考試題庫(kù)含答案【預(yù)熱題】
- 家政服務(wù)衛(wèi)生安全規(guī)定
- 花藝圓形花束課程設(shè)計(jì)
- 電子行業(yè)產(chǎn)品知識(shí)培訓(xùn)總結(jié)
- 項(xiàng)目立項(xiàng)申請(qǐng)計(jì)劃
- 文化藝術(shù)行業(yè)市場(chǎng)總結(jié)
- 銷(xiāo)售業(yè)績(jī)?cè)u(píng)估方法培訓(xùn)
- 青少年法治教育工作安排計(jì)劃
- 出版合同范本(2篇)
- 2024施工安全生產(chǎn)承諾書(shū)范文(34篇)
- 【安吉物流股份有限公司倉(cāng)儲(chǔ)管理現(xiàn)狀及問(wèn)題和優(yōu)化研究15000字(論文)】
- 火災(zāi)自動(dòng)報(bào)警系統(tǒng)施工及驗(yàn)收調(diào)試報(bào)告
- 中國(guó)成人血脂異常防治指南課件
- 2023塔式太陽(yáng)能熱發(fā)電廠集熱系統(tǒng)設(shè)計(jì)規(guī)范
- 識(shí)別藥用植物種類-識(shí)別藥用被子植物
- 滬教版八年級(jí)數(shù)學(xué)上冊(cè)《后記》教案及教學(xué)反思
- 2023屆高考英語(yǔ)《新課程標(biāo)準(zhǔn)》3000詞總表(字母順序版)素材
- 四川省地圖含市縣地圖矢量分層地圖行政區(qū)劃市縣概況ppt模板-2
- 引水隧洞專項(xiàng)施工方案
- 手機(jī)連接打印機(jī)
- 知識(shí)圖譜知到章節(jié)答案智慧樹(shù)2023年浙江大學(xué)
評(píng)論
0/150
提交評(píng)論