Python程序設(shè)計 課件 第七章 異常處理_第1頁
Python程序設(shè)計 課件 第七章 異常處理_第2頁
Python程序設(shè)計 課件 第七章 異常處理_第3頁
Python程序設(shè)計 課件 第七章 異常處理_第4頁
Python程序設(shè)計 課件 第七章 異常處理_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章異常處理與文件操作Python程序設(shè)計01異常處理02文件操作03本章回顧異常處理與文件操作程序設(shè)計要求程序有健壯性,但運行時存在導(dǎo)致程序不能正常運行的不確定因素,為增強交互性和便于診斷錯誤,要將不確定因素解釋為異常并處理。在實際開發(fā)中異常處理必不可少,文件操作使用頻率高(包括讀寫、復(fù)制等)且操作過程中常需異常處理,因此將二者放在一章介紹。01異常處理

異常是在程序運行過程中,影響程序正常執(zhí)行的一個事件。當(dāng)Python腳本發(fā)生異常時我們需要捕獲處理它,否則程序會終止執(zhí)行。本節(jié)將對常見的內(nèi)置異常、異常處理語句和自定義異常進行介紹。Python常用內(nèi)置異常我們之前遇到的NameError、SyntaxError、TypeError等都是異常,Python常見的內(nèi)置異??偨Y(jié)如表所示。Python中異常繼承關(guān)系Python中所有異常的基類是BaseException,所有常規(guī)錯誤的基類是Exception,所有的警告基類是Warning,主要異常類的繼承關(guān)系如下圖所示。異常處理語句在程序開發(fā)過程中,有些異常是在輸入不合法時才會出現(xiàn),此時我們可以對可能出現(xiàn)異常的情況進行處理。Python中異常處理的語句有try...except、try...except...else和try...except...finally三種。1.try...except語句捕捉異常可以使用try...except語句,try語句塊用來檢測錯誤,except語句捕獲異常信息并處理。在使用時,try語句塊中放入可能發(fā)生錯誤的代碼,except語句塊中放入處理結(jié)果,當(dāng)try語句塊中代碼出現(xiàn)錯誤時就執(zhí)行except語句塊中的代碼,若try語句塊中代碼沒有出現(xiàn)錯誤則except語句塊中的代碼不會執(zhí)行。異常處理語句

(1)語法格式與參數(shù)說明try...except語句的語法格式如下:參數(shù)說明如表所示。異常處理語句(2)try...except語句的使用接下來我們演示try...except語句的使用,首先定義一個計算銷量的函數(shù)count(),如下所示。如果沒有做任何異常處理,當(dāng)輸入單價為0時,將引發(fā)“ZeroDivisionError”異常,如右圖所示。異常處理語句此時我們使用try...except語句進

行異常處理,將count()方法放到try語句塊中,將發(fā)生錯誤的提示信息放到except中,如下圖所示。

運行【代碼7-1】,此時再將price輸入為0,將不會出現(xiàn)“ZeroDivisionError”異常,而是輸出except中的提示信息,結(jié)果如下圖所示。異常處理語句(3)多異常處理目前我們只處理了“ZeroDivisionError”異常,由于在定義count()函數(shù)時,price參數(shù)的類型時int,若輸入小數(shù),將會引發(fā)“ValueError”異常,如下圖所示。異常處理語句此時我們可以再一個except語句對ValueError異常進行處理,如右圖所示。從右圖中可以看出,此時若再將price輸入為小數(shù),將不會出現(xiàn)“ValueError”異常,而是打印except中的提示信息。異常處理語句2.try...except...else語句與try...except...finally語句在上述異常處理語句try...except基礎(chǔ)上,還可以增加else語句和finally語句,else語句的作用是當(dāng)try語句中沒有出現(xiàn)異常時執(zhí)行,finally語句是無論程序運行中是否發(fā)生異常都會執(zhí)行。try...except語句、try...except...else語句和try...except...finally語句的執(zhí)行邏輯如右圖所示。異常處理語句還是上面的案例,在上訴代碼的基礎(chǔ)上增加else語句塊和finally語句塊,如右圖所示。異常處理語句上圖代碼的運行結(jié)果可總結(jié)如下圖所示。自定義異常在程序開發(fā)過程中,當(dāng)使用標(biāo)準(zhǔn)內(nèi)置異常不能滿足業(yè)務(wù)需求時,就需要自定義異常。自定義異常需要直接或者間接繼承“Exception”異常類,然后使用raise語句拋出異常。自定義異常的應(yīng)用舉例如右圖所示。自定義異常上訴代碼的運行結(jié)果如下圖所示。02文件操作由于大部分?jǐn)?shù)據(jù)都是通過文件進行存儲的,所以文件操作在程序開發(fā)過程中是比較重要的一部分,也是程序員必須掌握的知識點。本節(jié)將介紹Python內(nèi)置文件對象File的基本操作和Excel文件的基本操作。文件基本操作1.文件分類我們在日常生活或工作中接觸的文件類型有很多,如Word文件、PPT文件、音頻文件、視頻文件等。而無論何種類型的文件,在內(nèi)存或磁盤上最終都是以二進制編碼存儲的。所以根據(jù)邏輯上編碼的不同,文件只分為文本文件和二進制文件兩類。(1)文本文件文本文件存儲的是人類可以直接閱讀的字符,采用的是字符編碼,如ASCII、Unicode編碼、GBK、UTF-8等。文本文件經(jīng)過編解碼過程就可以轉(zhuǎn)換成人類理解的信息,編碼過程就是將字符轉(zhuǎn)換成二進制,解碼過程就是將二進制還原成字符。文件基本操作(2)二進制文件二進制文件存儲的是字符以外的其它信息,包括圖片、聲音、視頻等,采用的是值編碼,以字符串的形式存儲。二進制文件是按照一定的規(guī)則,把信息轉(zhuǎn)換成二進制存儲到文件中,但由于圖片、聲音、視頻格式轉(zhuǎn)換比較復(fù)雜,而且各有各的標(biāo)準(zhǔn),所以為了簡化將其歸為一類。2.文件的打開和關(guān)閉(1)文件打開函數(shù)在Python中,想要操作文件首先需要打開并創(chuàng)建一個文件對象,通過open()函數(shù)即可實現(xiàn)文件打開,其語法格式如下:文件基本操作參數(shù)說明如右表所示。參數(shù)“access_mode”

的取值如右表所示。文件基本操作文件基本操作參數(shù)“buffering”的取值如表所示。

正常情況下,程序運行在內(nèi)存中,而緩沖區(qū)就是一個內(nèi)存空間,它可以視為一個FIFO(先進先出)隊列,當(dāng)緩沖區(qū)達(dá)到閾值或者滿了的時候,數(shù)據(jù)會被flush到磁盤。需要注意的是,對于參數(shù)“buffering”一般建議使用默認(rèn)的緩沖區(qū)設(shè)置,除非明確知道緩沖區(qū)所需大小。文件基本操作(2)文件關(guān)閉函數(shù)文件打開之后,需要及時進行關(guān)閉,通過close()函數(shù)即可實現(xiàn)文件關(guān)閉,其語法格式如下:其中file代表之前打開的、待關(guān)閉的文件對象。文件操作一般需要和異常處理語句結(jié)合使用,而close()函數(shù)一般會放在finally語句塊中。close()函數(shù)運行時會先刷新緩沖區(qū)還沒寫入的信息,然后再關(guān)閉文件。文件基本操作(3)文件打開和關(guān)閉的應(yīng)用接下來我們演示一下文件打開和閉關(guān)函數(shù)的使用,首先在JupyterNotebook中新建一個文本文件,如右圖所示。然后將新建的文件重命名為“test.txt”,并編輯一些文本內(nèi)容,如右圖所示。文件基本操作此時可以使用代碼“file=open('test.txt')”打開文件,然后訪問file對象,運行結(jié)果如右圖所示。從上圖中可以看出,由于我們沒有傳遞參數(shù)“access_mode”,所以是采用默認(rèn)方式“r”(只讀)打開,編碼是“cp936”。如果我們想使用編碼“utf-8”打開,可以使用代碼“file=open('test.txt',encoding='utf-8')”,此時再訪問file文件,編碼即變?yōu)榱恕皍tf-8”,如右圖所示。文件基本操作有了文件對象之后,還可以通過mode、name、closed屬性分別獲取打開模式、名字和是否已經(jīng)關(guān)閉信息,如右圖所示。如果我們打開一個不存在的文件,將會出現(xiàn)“FileNotFoundError”異常,如右圖所示。文件基本操作此時可以將打開文件進行異常處理,并在finally語句中進行文件關(guān)閉,如右圖所示。文件基本操作上訴代碼的運行結(jié)果分別如圖1和圖2所示。文件基本操作3.文件讀寫Python中的file對象提供了一些方法用于對文件進行讀寫,常用的總結(jié)如表所示。文件基本操作以下是一個讀寫文件的小案例。下圖代碼的運行結(jié)果如下圖所示。文件基本操作需要注意的是,在讀寫模式下如果是先寫后讀,寫入后由于文件指針會移動到文件尾,想要讀取文件內(nèi)容需要將文件指針移動到文件頭位置(f.seek(0))。運行完上圖代碼之后,由于我們之前沒“test1.txt”文件,在“w+”讀寫模式下,如果文件不存在,會創(chuàng)建一個新文件,此時可發(fā)現(xiàn)JupyterNotebook中多了一個文件“test1.txt”,文件的內(nèi)容如下圖所示。文件基本操作上訴代碼中是使用的read()函數(shù)讀取數(shù)據(jù),接下來分別使用readline()和readlines(),查看它們之間的區(qū)別,如下圖所示。使用os模塊操作文件及目錄Python中的os模塊及其子模塊os.path提供了一些方法用來處理文件和目錄。1.文件處理os模塊分別提供了rename()函數(shù)和remove()函數(shù)來重命名和刪除文件,rename()函數(shù)主要傳遞兩個參數(shù),第一個參數(shù)是文件原名,第二個參數(shù)為文件的新名字,其語法格式如下:使用os模塊操作文件及目錄remove()函數(shù)的參數(shù)就是待刪除文件的路徑,如想要刪除上面重命名后的“test2.txt”文件,可使用代碼“os.remove('test2.txt')”。

如我們要將前面代碼中的文件“test1.txt”重命名為“test2.txt”,可使用代碼“os.rename('test1.txt','test2.txt')”,如下圖所示。使用os模塊操作文件及目錄2.目錄操作(1)創(chuàng)建目錄os模塊中最基礎(chǔ)的用于創(chuàng)建目錄的函數(shù)是os.mkdir(path),如我們想在E盤下新建一個目錄test,可使用代碼“os.mkdir('E:\\test')”,但若使用此方法時,E盤已存在test目錄,此時會報錯,如下圖所示。使用os模塊操作文件及目錄遇到此種情況,可先使用os.path.exists(path)函數(shù)判斷目錄是否存在,當(dāng)目錄不存在時再進行創(chuàng)建,如右圖所示。此時運行代碼,結(jié)果如右圖所示。使用os模塊操作文件及目錄創(chuàng)建的目錄可以在指定路徑下查看,如下圖所示。使用os模塊操作文件及目錄(2)創(chuàng)建多級目錄上述的mkdir()函數(shù)用于創(chuàng)建一級目錄,如果給定的目錄有多級,且最后一級的上級目錄不存在,使用mkdir()函數(shù)會出現(xiàn)FileNotFoundError異常,如下圖所示。使用os模塊操作文件及目錄此時可以使用os.makedirs(path)函數(shù)遞歸創(chuàng)建多級目錄,如下圖所示。使用os模塊操作文件及目錄(3)刪除目錄刪除目錄可以使用os.rmdir(path)函數(shù),但是需要注意的是,此函數(shù)只能刪除空目錄,如我們刪除前面代碼中創(chuàng)建的目錄“E:\\test\\test1”,代碼為“os.rmdir('E:\\test\\test1')”,運行此代碼后,再次查看test文件夾,已經(jīng)為空了(代表刪除成功),如下圖所示。使用os模塊操作文件及目錄此時如果我們在test中新建一個“test.txt”文件,此時再刪除test文件夾,會出現(xiàn)OSError錯誤,如下圖所示。(1)

遍歷目錄使用os模塊中的walk()函數(shù)可以獲取指定目錄下的所有目錄及文件,其語法格式如下:使用os模塊操作文件及目錄參數(shù)說明如表所示。接下來對walk()函數(shù)的使用進行舉例,假設(shè)有一個目錄結(jié)構(gòu)如右圖所示。使用os模塊操作文件及目錄遍歷上圖中目錄的代碼如右圖所示。右圖代碼的運行結(jié)果如右圖所示。使用os模塊操作文件及目錄上圖的運行遍歷結(jié)果顯示得并不友好,為了看起來更舒適,可結(jié)合拼接路徑函數(shù)os.path.join()實現(xiàn)更好的展示效果,如右圖所示。上訴代碼的運行結(jié)果如下圖所示。使用os模塊操作文件及目錄3.

常用方法總結(jié)除了上述介紹的文件處理和目錄操作的相關(guān)方法,os模塊和其子模塊os.path還提供了獲取當(dāng)前工作目錄、獲取絕對路徑等方法,為了方便大家記憶,現(xiàn)將常用的方法總結(jié)如表所示。Excel文件操作在開發(fā)過程中,經(jīng)常需要處理Excel文件,Python中提供了一些用于處理excel文件的第三方模塊。使用xlwt模塊對以“.xls”為后綴(2003以前的版本)的表格文件進行寫入。使用xlrd模塊對以“.xls”為后綴(2003以前的版本)的表格文件進行讀取。xlutils模塊可以實現(xiàn)xlwt和xlrd之間的轉(zhuǎn)換。使用openpyxl模塊實現(xiàn)對以“.xlsx”為后綴(2007以后的版本)的表格文件的讀寫。Excel文件操作1.使用xlwt模塊實現(xiàn)寫入xls文件使用xlwt模塊寫入xls文件一般需要5個步驟,如右圖所示。Excel文件操作接下來舉例說明,如右圖所示。Excel文件操作運行上圖代碼,查看E盤,發(fā)現(xiàn)其下已經(jīng)多了一個“test.xls”文件,打開此文件查看內(nèi)容,如右圖所示。Excel文件操作在寫入文件時,還可以進行列寬、行高、居中等設(shè)置,我們將之前的案例進行改造,如下圖所示。Excel文件操作運行代碼,得到新的文件“test.xls”,內(nèi)容如下圖所示。和前圖相比,上圖中的行高、列寬都有了變化,且數(shù)據(jù)已居中顯示。Excel文件操作2.使用xlrd模塊讀取xls文件使用xlrd模塊讀取xls文件可總結(jié)為4步,如右圖所示。Excel文件操作接下來讀取前面代碼中生成的“test.xls”文件,如下圖所示。Excel文件操作上訴代碼的運行結(jié)果如下圖所示。Excel文件操作3.使用xlutils模塊實現(xiàn)xlwt和xlrd之間的轉(zhuǎn)換由于使用xlrd模塊中的open_workbook()函數(shù)讀取xls文件返回的“xlrd.book.Book”類型的對象是只讀的,不能對其進行修改。而如果我們想要實現(xiàn)讀取xls文件后對其進行修改,就要借助于xlutils模塊。如果此Python環(huán)境中沒有xlutils模塊,可以使用命令“pipinstallxlutils”進行安裝,如下圖所示。Excel文件操作xlutils.copy模塊的copy()方法可以將“xlrd.book.Book”類型轉(zhuǎn)換為xlwt模塊中的“xlwt.Workbook.Workbook”類型,如下圖所示。Excel文件操作接下來舉一個讀取xls文件,然后修改保存的例子,如下圖所示。Excel文件操作運行上圖代碼,發(fā)現(xiàn)E盤多了一個文件“test2.xls”,打開發(fā)現(xiàn)其有兩個工作表,其內(nèi)容如下圖所示。Excel文件操作4.使用openpyxl模塊進行xlsx文件的讀寫對于xlsx格式的Excel文件讀寫可以使用第三方模塊openpyxl實現(xiàn)。(1)使用openpyxl寫入xlsx文件使用openpyxl寫入xlsx文件的思路與上文介紹的使用xlwt模塊寫入xls文件類似,都是首先導(dǎo)入模塊,然后創(chuàng)建工作薄、工作表、寫入數(shù)據(jù),最后保存到指定文件,舉例如右圖所示。Excel文件操作運行上圖代碼,發(fā)現(xiàn)E盤多了一個文件“test3.xlsx”,其有兩個工作表,內(nèi)容下圖所示。Excel文件操作與寫入xls文件時類似,在寫入xlsx文件時也可以設(shè)置行高、列寬、對齊方式等,如右圖所示。Excel文件操作運行上訴代碼之后,打開E盤下的“test4.xlsx”文件,內(nèi)容如下圖所示。Excel文件操作(2)openpyxl模塊相關(guān)屬性介紹上述案例中我們主要用到的是openpyxl模塊的Workbook、Worksheet和Cell對象,其常用屬性總結(jié)如表所示。Excel文件操作(3)使用openpyxl讀取xlsx文件使用openpyxl讀取xlsx文件的思路與上文介紹的使用xlrd模塊讀取xls文件類似,都是首先導(dǎo)入模塊,然后獲取工作薄、工作表,最后獲取工作表中的內(nèi)容,舉例如右圖所示。Excel文件操作上訴代碼的運行結(jié)果如下圖所示。案例【案例描述】GDP(GrossDomesticProduct),即國內(nèi)生產(chǎn)總值,是一個國家(或地區(qū))所有常住單位在一定時期內(nèi)生產(chǎn)活動的最終成果。GDP是國民經(jīng)濟核算的核心指標(biāo),也是衡量一個國家或地區(qū)經(jīng)濟狀況和發(fā)展水平的重要指標(biāo)?,F(xiàn)有一份表格中記錄了187個國家從2000年至2017年的的GDP數(shù)據(jù)(單位:萬億元),如圖7-42所示。案例【案例要求】由于表中數(shù)據(jù)較多,為了方便查看,現(xiàn)設(shè)計一個程序用于從當(dāng)前數(shù)據(jù)表中提取某個國家的GDP信息到新的工作表中,提取后可以適當(dāng)進行格式處理?!緦崿F(xiàn)思路】①讀取表格中數(shù)據(jù)。②根據(jù)需求獲取某個國家的GDP信息。③將獲取到的某個國家GDP信息保存到一個新的工作表中。④可在其中結(jié)合異常處理的方法。案例【案例代碼】案例

【運行結(jié)果】運行上圖代碼,在輸入框中輸入中國,控制臺輸出結(jié)果如圖所示。案例E盤中的gdp3.xlsx內(nèi)容如右圖所示。03本章回顧本章共分為兩小節(jié)內(nèi)容,第一小節(jié)主要介紹異常處理,包括異常概述、異常處理語句和自定義異常。第二小節(jié)主要介紹文件操作,包括文本文件的操作、二進制文件的操作、Excel文件操作等內(nèi)容。本章回顧【綜合練習(xí)】1.【多選】Python中的異常處理語句包括()。A.try...except語句B.try...except...else語句C.try...except...finally語句D.try…catch語句2.【多選】以下關(guān)于Python異常的描述,正確的有()。A.異常是在程序運行過程中,影響程序正常執(zhí)行的一個事件B.BaseException是所有異常的基類C.Exception是所有異常的基類D.RuntimeError代表一般的運行時錯誤本章回顧3.【多選】以下關(guān)于Python異常處理語句的描述,正確的有()。A.在Python中,捕捉異??梢允褂胻ry...except語句B.try語句塊用來檢測錯誤C.except語句用于捕獲異常信息并處理D.finally語句是無論程序運行中是否發(fā)生異常都會執(zhí)行4.【多選】根據(jù)邏輯上的編碼

溫馨提示

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

最新文檔

評論

0/150

提交評論