




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Python程序設(shè)計(jì)第9章異常處理第9章異常處理信息工程學(xué)院計(jì)算機(jī)工程系湖州師范學(xué)院Python程序設(shè)計(jì)Python課程組主講:XXXXX目錄/CONTENT02異常處理基本結(jié)構(gòu)和用法————————————————————————————01異常處理概述——————————————————————03自定義異常類——————————————————————異常處理導(dǎo)圖當(dāng)發(fā)生異常情況時(shí),如果不能發(fā)現(xiàn)并加以處理,很可能會(huì)導(dǎo)致程序崩潰。所謂“處理”,可以是給出錯(cuò)誤提示信息,然后讓程序改變執(zhí)行路徑以繼續(xù)執(zhí)行程序;也可以強(qiáng)制結(jié)束程序,但必須在結(jié)束前做一些必要的工作,如將內(nèi)存中的數(shù)據(jù)寫入文件、關(guān)閉打開的文件、釋放動(dòng)態(tài)分配的內(nèi)存空間等。Python中有非常豐富的異常處理方法。Python的異常處理機(jī)制使得在程序出現(xiàn)異常時(shí)可以用統(tǒng)一的處理方法進(jìn)行處理,使得程序更加穩(wěn)定和健壯。9.1異常處理概述(1)中英文符號(hào)混淆,需要使用英文符號(hào)的地方用了中文符號(hào),例如:逗號(hào)、冒號(hào)、括號(hào)等。(2)變量、函數(shù)等命名不符合標(biāo)識(shí)符規(guī)范。(3)條件語句、循環(huán)語句、函數(shù)定義后面忘了寫冒號(hào)。(4)屬于同一語句塊的同級(jí)的語句縮進(jìn)不一致。(5)判斷兩個(gè)對(duì)象相等時(shí),使用一個(gè)等號(hào)而不是兩個(gè)等號(hào)。(6)表達(dá)式較為復(fù)雜時(shí),左右括號(hào)不匹配,少了或多了左/右括號(hào)。(7)函數(shù)調(diào)用時(shí),形參與實(shí)參數(shù)量、類型、順序等不符合要求。(8)……9.1.1異常的概念1.語法錯(cuò)誤概述程序在執(zhí)行過程中發(fā)生的不正常行為稱為異常。程序設(shè)計(jì)者在編寫程序時(shí),難免會(huì)遇到錯(cuò)誤,有的是程序員疏忽造成的語法錯(cuò)誤;有的則是程序內(nèi)部隱含邏輯問題造成的;有的則是由于程序使用者在應(yīng)用程序輸入的數(shù)據(jù)錯(cuò)誤;還有的是程序運(yùn)行時(shí)與系統(tǒng)的規(guī)則沖突造成的系統(tǒng)錯(cuò)誤,……。一般來說,程序錯(cuò)誤有兩類:語法錯(cuò)誤和異常(運(yùn)行時(shí)出錯(cuò))。Python中是通過面向?qū)ο蟮姆椒▉硖幚懋惓5?,每個(gè)異常都是某個(gè)類的實(shí)例。當(dāng)一段代碼運(yùn)行發(fā)生異常,則生成代表該異常的一個(gè)對(duì)象交給Python解釋器,解釋器根據(jù)相應(yīng)的代碼來處理這一異常。程序中引入異常處理機(jī)制后可以將正常代碼與異常進(jìn)行物理隔離,程序更加清晰可讀。9.1.1異常的概念2.異常在程序運(yùn)行時(shí)當(dāng)解釋器發(fā)現(xiàn)某段代碼符合語法但有可能出現(xiàn)不正常的情況時(shí),解釋器便會(huì)發(fā)出一個(gè)事件,結(jié)束程序的正常執(zhí)行。所謂異常就是在解釋器發(fā)現(xiàn)到程序出現(xiàn)錯(cuò)誤的時(shí)候,則會(huì)產(chǎn)生一個(gè)異常,若程序沒有做出相應(yīng)處理,則會(huì)將該異常拋出,程序的運(yùn)行也隨之終止。通常,異常的發(fā)生是由于計(jì)算機(jī)硬件、程序設(shè)計(jì)錯(cuò)誤、運(yùn)行環(huán)境不滿足等原因造成程序運(yùn)行時(shí)錯(cuò)誤。9.1.2常見異常類型Python中常規(guī)的異常類都是Exception的子類。Exception定義在Exceptions模塊中,該模塊是Python的內(nèi)置模塊,用戶可以直接使用。異常類功能描述Exception常規(guī)錯(cuò)誤的基類FileNotFoundError文件不存在AttributeError屬性錯(cuò)誤,對(duì)象屬性不存在IndexError索引錯(cuò)誤,索引超出范圍KeyError在字典中查找一個(gè)不存在的關(guān)鍵字NameError嘗試訪問一個(gè)不存在的變量SyntaxError語法錯(cuò)誤TypeError類型錯(cuò)誤,不同類型間的無效操作ZeroDivisionError除0錯(cuò)誤,即分母為0IndentationError縮進(jìn)錯(cuò)誤ValueError傳遞給函數(shù)的參數(shù)類型錯(cuò)誤RuntimeError一般的運(yùn)行時(shí)錯(cuò)誤9.1.2常見異常類型1.常見異常類介紹示例如下:(1)FileNotFoundError異常類(2)AttributeError異常類(3)IndexError異常類(4)KeyError異常類(5)NameError異常類(6)SyntaxError異常類(7)TypeError異常類(8)ZeroDivisionError異常類(9)IndentationError異常類(10)ValueError異常類【例94】IndexError異常示例。s="HelloPython"s[len(s)]【例93】AttributeError異常示例。classTest:passt=Test()print(t.id)9.1.2常見異常類型2.常用異常類屬性和方法示例如下:每種異常類都提供了相關(guān)的屬性和方法,以下是常見的屬性和方法,具體用法參閱例9-13。(1)屬性args。返回異常的錯(cuò)誤編號(hào)和描述字符串,是一個(gè)元組。(2)方法str()。返回異常信息字符串,不包括異常的類型。(3)方法repr()。返回較全的異常信息,包括異常的類型?!纠??13】異常類屬性和方法示例。try:m=int(input("輸入m:"))n=int(input("輸入n:"))ifm<n:m,n=n,mt=m%nwhilet!=0:m,n=n,m%nt=m%nprint(n)exceptExceptionase:print(e.args)print(str(e))print(repr(e))9.2.1Try…except語句概述Python用異常對(duì)象表示異常情況,遇到錯(cuò)誤后,會(huì)拋出異常。如果異常對(duì)象并未被處理或捕捉,程序就會(huì)終止執(zhí)行退出應(yīng)用程序。在實(shí)際程序設(shè)計(jì)中,需要寫出健壯性的程序,程序在執(zhí)行過程中遇到了異常不應(yīng)該只是自動(dòng)終止了事。因此,在程序中需要有相關(guān)處理程序執(zhí)行過程中的異常的方法,確保程序不會(huì)因?yàn)榘l(fā)生異常而終止。9.2.1Try…except語句語法格式說明:try:
語句塊 except[異常類型1[ase]]:處理“異常類型1”語句塊 except[異常類型2[ase]]:處理“異常類型2”語句塊 ……首先,執(zhí)行try子句(之后的語句塊,即try和except關(guān)鍵字之間的語句塊)。如果沒有引發(fā)異常,則跳過except子句,try語句執(zhí)行完畢。如果在執(zhí)行try子句時(shí)引發(fā)了異常,則跳過該子句中剩余的語句。如果異常的類型與except關(guān)鍵字后指定的異常類型相匹配,則會(huì)執(zhí)行except子句,然后跳到try…except代碼塊之后繼續(xù)執(zhí)行。如果發(fā)生的異常與except子句中指定的異常類型都不匹配,則它會(huì)被傳遞到外部的try語句中;如果沒有找到處理程序,則它是一個(gè)未處理異常且將終止程序執(zhí)行。try語句可以有多個(gè)except子句來為不同的異常指定處理程序。但最多只有其中一個(gè)處理程序會(huì)被執(zhí)行。處理程序只處理對(duì)應(yīng)的try子句中發(fā)生的異常,而不處理同一try語句內(nèi)其他處理程序中的異常。except子句可以用帶圓括號(hào)的元組來指定多個(gè)異常。ase作為可選參數(shù),表示給異常類型起一個(gè)別名e,以便在except語句塊中調(diào)用異常類型。9.2.1Try…except語句例代碼:【例9-12】輸入兩個(gè)正整數(shù),輸出這兩個(gè)數(shù)的最大公約數(shù)(最大公約數(shù),指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。)。try:m=int(input("輸入m:"))n=int(input("輸入n:"))ifm<n:m,n=n,mt=m%nwhilet!=0:m,n=n,m%nt=m%nprint(n)exceptZeroDivisionError:print("m,n中有0")exceptValueError:print("m,n中有非整數(shù)")9.2.2try…except…else語句語法格式說明:try:
語句塊except[異常類型1[ase]]:處理“異常類型1”語句塊[except[異常類型2[ase]]:處理“異常類型2”語句塊]……[else:
無任何異常引發(fā)處理語句塊]只有當(dāng)try塊沒有捕獲到任何異常時(shí),才會(huì)執(zhí)行else子句;反之,如果try塊捕獲到異常,即便執(zhí)行完對(duì)應(yīng)處理異常的except子句,else塊中的代碼也不會(huì)得到執(zhí)行。9.2.2try…except…else語句例說明:try:m=int(input("輸入m:"))n=int(input("輸入n:"))ifm<n:m,n=n,mt=m%nwhilet!=0:m,n=n,m%nt=m%nprint(n)exceptZeroDivisionError:print("m,n中有0")exceptValueError:print("m,n中有非整數(shù)")else:print("程序未捕獲異常")注意,在try…except…else語句中,else子句必須與except子句配合使用。若只出現(xiàn)else子句,解釋器提示代碼有語法錯(cuò)誤。以下代碼可以說明這一情況。9.2.3try…except…finally語句語法格式說明:無論try塊是否發(fā)生異常,最終都要進(jìn)入finally語句,并執(zhí)行其中的代碼塊。try:
語句塊[except[異常類型1[ase]]:處理“異常類型1”語句塊][except[異常類型2[ase]]:處理“異常類型2”語句塊]……[else:
無任何異常引發(fā)處理語句塊][finally:
無任何異常引發(fā)處理語句塊]try:m=int(input("輸入m:"))n=int(input("輸入n:"))ifm<n:m,n=n,mt=m%nwhilet!=0:m,n=n,m%nt=m%nprint(n)exceptZeroDivisionError:print("m,n中有0")exceptValueError:print("m,n中有非整數(shù)")finally:print("try語句執(zhí)行結(jié)束")9.2.4raise語句語法格式示例:Exception是一個(gè)通用異常類,若不知道、不確定該使用什么異常類的時(shí)候,就可以通過Exception來捕獲或者結(jié)合raise關(guān)鍵字主動(dòng)拋出異常raise[異常類[(原因)]]try:age=int(input("輸入年齡:"))ifage<0:raiseException("輸入的是負(fù)數(shù)")print("age=",age)except:print("引發(fā)異常")9.2.5assert語句語法格式示例:python中assert是常用的調(diào)試工具,利用好assert可以有效的提升程序測試效率。assert條件表達(dá)式,描述信息【例9-21】簡易標(biāo)識(shí)符判斷,假設(shè)合法的標(biāo)識(shí)符只能以下劃線或英文字母開頭,若不合法拋出異常。try:n=input("請(qǐng)輸入python標(biāo)識(shí)符:")assertn[0]=="_"orn[0].isalpha(),"只能下劃線或字母開頭"print("你輸入的標(biāo)識(shí)符是:",n)exceptExceptionase:print("發(fā)現(xiàn)錯(cuò)誤:",e)9.3自定義異常類語法格式示例:Exception是一個(gè)通用異常類,若不知道、不確定該使用什么異常類的時(shí)候,除了可以通過Exception來捕獲或者結(jié)合raise關(guān)鍵字主動(dòng)拋出異常之外,也可以根據(jù)程序的實(shí)際情況,自定義異常類來處理可能出現(xiàn)的異常?!纠?-22】定義MyZeroDivisionError類,當(dāng)除數(shù)為0,引發(fā)異常。classMyZeroDivisionError(Exception):def__init__(self,eid,emessage):self.__id=eidself.__message
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 攝影技巧基礎(chǔ)知識(shí)培訓(xùn)班課件
- 網(wǎng)絡(luò)信息安全技術(shù)試題及答案
- 2025醫(yī)療耗材采購合同范本
- 2025合同無效的示范文本
- 攝像助理基礎(chǔ)知識(shí)培訓(xùn)
- 2025年齊齊哈爾市軟件公司勞務(wù)派遣合同范本
- 搞笑課件文案
- 如何開展年度民主評(píng)議黨員工作有效加強(qiáng)黨員黨性鍛煉增強(qiáng)黨的組織生活活力
- 星海集團(tuán)招聘高級(jí)職位面試題庫
- 互聯(lián)網(wǎng)時(shí)代內(nèi)容經(jīng)營策略面試題
- 《跨境電商實(shí)用英語》課后參考答案 懷秀鳳
- 液化氣站安全風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理雙重預(yù)防機(jī)制建設(shè)體系手冊(cè)全套參考范本
- 中國健康調(diào)查報(bào)告(共3篇)
- 國家開放大學(xué)成人學(xué)歷報(bào)名登記表
- 外研版八年級(jí)下冊(cè)選詞短文填空期中復(fù)習(xí)專項(xiàng)練習(xí)10篇(含答案)
- cloudpss能源互聯(lián)網(wǎng)大會(huì)發(fā)布
- 轉(zhuǎn)基因水生生物的安全性
- 斑馬湖萬達(dá)廣場專項(xiàng)水文地質(zhì)勘察報(bào)告
- GB/T 4857.23-2021包裝運(yùn)輸包裝件基本試驗(yàn)第23部分:垂直隨機(jī)振動(dòng)試驗(yàn)方法
- FZ/T 64012-2013衛(wèi)生用水刺法非織造布
- DB63-T 1996-2021自然保護(hù)地++特許經(jīng)營
評(píng)論
0/150
提交評(píng)論