Python3程序設(shè)計(jì)(第3版) 課件 第9、10章 Python的文件操作;異常處理_第1頁(yè)
Python3程序設(shè)計(jì)(第3版) 課件 第9、10章 Python的文件操作;異常處理_第2頁(yè)
Python3程序設(shè)計(jì)(第3版) 課件 第9、10章 Python的文件操作;異常處理_第3頁(yè)
Python3程序設(shè)計(jì)(第3版) 課件 第9、10章 Python的文件操作;異常處理_第4頁(yè)
Python3程序設(shè)計(jì)(第3版) 課件 第9、10章 Python的文件操作;異常處理_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Python的文件操作9.1文件的概念其一其二其三文本文件和二進(jìn)制文件文本文件由字符組成,按ASCII碼、UTF-8等格式編碼。二進(jìn)制文件存儲(chǔ)的是0、1編碼。文本文件與二進(jìn)制文件都可以打開(kāi),但打開(kāi)后操作不同。文件的編碼方式ASCII、Unicode、UTF-8、GB2312、GBK。Python源代碼默認(rèn)編碼方式為UTF-8。文件指針的概念Python用指針表示當(dāng)前讀寫(xiě)位置,在讀寫(xiě)文件時(shí),指針的位置自動(dòng)移動(dòng)。只讀方式打開(kāi)文件,指針指向文件開(kāi)頭。向文件寫(xiě)數(shù)據(jù)或追加數(shù)據(jù),指針指向文件末尾。Python的文件操作Unicode是國(guó)際統(tǒng)一的字符編碼標(biāo)準(zhǔn),它是編碼轉(zhuǎn)換的基礎(chǔ)。編碼轉(zhuǎn)換時(shí),先把一種編碼的字符串轉(zhuǎn)換成Unicode編碼的字符串,然后再轉(zhuǎn)換成其他編碼的字符串。UTF-8編碼是Unicode標(biāo)準(zhǔn)的具體實(shí)現(xiàn),是國(guó)際通用的編碼方式,用8位(1字節(jié))表示英語(yǔ)(兼容ASCII碼),以24位(3字節(jié))表示中文及其他語(yǔ)言。如果文件使用UTF-8編碼格式,在任何平臺(tái)下(中文操作系統(tǒng)、英文操作系統(tǒng)、日文操作系統(tǒng)等)都可以顯示不同國(guó)家的文字。Python語(yǔ)言源文件默認(rèn)的編碼方式是UTF-8。UTF-16編碼和UTF-32編碼也是Unicode標(biāo)準(zhǔn)的具體實(shí)現(xiàn)。GB2312編碼是中國(guó)國(guó)家標(biāo)準(zhǔn)簡(jiǎn)體中文字符集,用1字節(jié)表示英文字符,用2字節(jié)表示漢字字符。GBK是對(duì)GB2312的擴(kuò)充。9.1文件的概念Python的文件操作9.2文件的打開(kāi)與關(guān)閉1.打開(kāi)文件

myfile=open(filename[,mode])myfile為引用文件的變量。filename為用字符串描述的文件名,可以包含文件的存儲(chǔ)路徑。mode為文件讀寫(xiě)模式2.關(guān)閉文件close()方法用于關(guān)閉文件。

file.close()flush()方法可將緩沖區(qū)內(nèi)容寫(xiě)入文件,但不關(guān)閉文件。

file.flush()>>>

file1=open("readme.txt")Traceback

(most

recent

call

last):

File

"<pyshell#5>",

line

1,

in

<module>

file1=open("readme.txt")FileNotFoundError:

[Errno

2]

No

such

file

or

directory:

'readme.txt'

#以只讀模式打開(kāi)>>>

file2=open("s1.py",'r')

>>>

file3=open("e:\\python312\\test.txt","w+")>>>

file4=open("tu3.jpg","ab+")Python的文件操作9.2文件的打開(kāi)與關(guān)閉模式描述r以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。r+打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。w打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。w+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。a打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。a+打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。rb以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。一般用于非文本文件如圖片等。wb以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。ab以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。rb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。一般用于非文本文件如圖片等。wb+以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除。如果該文件不存在,創(chuàng)建新文件。一般用于非文本文件如圖片等。ab+以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果該文件不存在,創(chuàng)建新文件用于讀寫(xiě)。Python的文件操作9.3文件的讀/寫(xiě)操作方法說(shuō)明read([size])讀取文件全部?jī)?nèi)容,或讀取size長(zhǎng)度的字符或字節(jié)readline([size])讀取文件一行內(nèi)容,或讀取當(dāng)前行size長(zhǎng)度的字符或字節(jié)readlines([hint])讀取文件的所有行,或讀入hint行write(str)將字符串str寫(xiě)入文件writelines(seq_of_str)寫(xiě)多行到文件,參數(shù)seq_of_str為可迭代的對(duì)象讀取文件數(shù)據(jù)9.3.1向文件寫(xiě)數(shù)據(jù)9.3.2f=open("test.txt","r",encoding="utf-8")str1=f.read(10)print(str1)str2=f.read()print(str2)f.close()f=open("test.txt","r",encoding="utf-8")flist=f.readlines()#flist是文件內(nèi)容的列表print(flist)forlineinflist:print(line)#用print(line,end="")f.close()Python的文件操作9.3文件的讀/寫(xiě)操作fname=input("請(qǐng)輸入追加數(shù)據(jù)的文件名:")f1=open(fname,"w+")f1.write("向文件中寫(xiě)入字符串\n")f1.write("繼續(xù)寫(xiě)入")f1.close()f1=open("e:\\python312\\data7.dat","a")lst=["innovation","development","revitalization"]tup1=('2024','2020','2012')m1={"創(chuàng)新":"innovation","發(fā)展":"development"}f1.writelines(lst)f1.writelines('\n')f1.writelines(tup1)f1.writelines('\n')f1.writelines(m1)f1.close()Python的文件操作9.3文件的讀/寫(xiě)操作1.獲取文件當(dāng)前的讀/寫(xiě)位置2.移動(dòng)文件讀/寫(xiě)位置

file.seek(offset[,whence])1.讀/寫(xiě)bytes字符串2.讀/寫(xiě)Python對(duì)象

文件的定為讀/寫(xiě)9.3.3讀/寫(xiě)二進(jìn)制文件9.3.4>>>file=open("e:\\python312\\test.txt","r+",encoding="utf-8")>>>file.seek(6)>>>str1=file.read(5)>>>print(str1)二十大報(bào)告>>>file.tell()>>>file.seek(0)>>>file.readline()>>>fileb=open(r"e:\python312\ch9a\mydata.dat",'wb')>>>fileb.write(b"HelloPython")>>>n=123>>>fileb.write(bytes(str(n),encoding='utf-8'))>>>fileb.close()>>>file=open(r"e:\python312\ch9a\mydata.dat",'rb')>>>print(file.read())

#b'HelloPython123\n3.14'>>>file.close()Python的文件操作9.4文件和目錄操作常用的文件操作函數(shù)9.4.11.os.path模塊常用的文件處理函數(shù)函數(shù)名說(shuō)明示例abspath(path)返回path的絕對(duì)路徑>>>os.path.abspath('test.txt')dirname(path)返回path的目錄。與os.path.split(path)的第一個(gè)元素相同>>>os.path.dirname('e:\\python312\\test.txt')exists(path)如果path存在,返回True;否則返回False>>>os.path.exists('e:\\python312')getatime(path)返回path所指向的文件或者目錄的最后存取時(shí)間>>>os.path.getatime('e:\\python312')getmtime(path)返回path所指向的文件或者目錄的最后修改時(shí)間>>>os.path.getmtime('e:\\python312\\test.txt')getsize(path)返回path的文件的大小(字節(jié))>>>os.path.getsize('e:\\python312\\test.txt')isabs(path)如果path是絕對(duì)路徑,返回True>>>os.path.isabs('e:\\python312')isdir(path)如果path是一個(gè)存在的目錄,則返回True,否則返回False>>>os.path.isdir('e:\\python312')Trueisfile(path)如果path是一個(gè)存在的文件,返回True,否則返回False>>>os.path.isfile('e:\\python312')FalsePython的文件操作9.4文件和目錄操作常用的文件操作函數(shù)9.4.12.os模塊常用的文件處理函數(shù)函數(shù)名功能說(shuō)明os.getcwd()當(dāng)前Python腳本工作的路徑os.listdir(path)返回path目錄下的所有文件和目錄名os.remove(file)刪除參數(shù)file指定的文件os.removedirs(path)刪除目錄pathos.rename(old,new)將文件old重命名為newos.mkdir(path)創(chuàng)建path目錄os.stat(path)獲取文件屬性Python的文件操作9.4文件和目錄操作文件的復(fù)制、刪除及重命名9.4.21.文件的復(fù)制。

shutil模塊的copyfile()函數(shù)。2.文件的刪除。3.文件的重命名。>>>

import

shutil>>>

shutil.copyfile("test.txt",'testb.py')importos,os.pathfname=input("請(qǐng)輸入需要?jiǎng)h除的文件名:")ifos.path.exists(fname):os.remove(fname)else:print("{}文件不存在".format(fname))importos,os.path,sysfname=input("請(qǐng)輸入需要更名的文件:")gname=input("請(qǐng)輸入更名后的文件名:")ifnotos.path.exists(fname):print("{}文件不存在".format(fname))sys.exit(0)elifos.path.exists(gname):print("{}文件已存在".format(gname))sys.exit(0)else:os.rename(fname,gname)print("renamesuccess")Python的文件操作9.4文件和目錄操作文件的目錄操作9.4.31.os.getcwd()查看當(dāng)前目錄。2.os.makedirs()創(chuàng)建多級(jí)目錄。3.os.rmdir()刪除空目錄。4.shutil.rmtree刪除存在內(nèi)容的目錄。>>>importos>>>os.getcwd()#查看當(dāng)前目錄>>>os.listdir()#查看當(dāng)前目錄中的文件>>>os.mkdir('myforder')>>>os.makedirs('yourforder\\f1\\f2')>>>os.rmdir('myforder')>>>os.removedirs('yourforder\\f1\\f2')>>>os.makedirs('aforder\\ff1\\ff2')#創(chuàng)建多級(jí)目錄>>>importshutil>>>shutil.rmtree('yourforder')

#刪除存在內(nèi)容的目錄Python的文件操作9.5使用CSV文件格式讀/寫(xiě)數(shù)據(jù)CSV文件介紹9.5.11.CSV文件概念和特點(diǎn)CSV文件是一種文本文件,由任意數(shù)目的行組成,一行被稱(chēng)為一條記錄。CSV格式存儲(chǔ)的文件一般采用.csv為擴(kuò)展名,可以用記事本或微軟Excel工具打開(kāi),可以在其他操作系統(tǒng)平臺(tái)上用文本編輯工具打開(kāi)。①讀取出的數(shù)據(jù)一般為字符類(lèi)型,如要獲得數(shù)值類(lèi)型,需要用戶(hù)進(jìn)行轉(zhuǎn)換。②以行為單位讀取數(shù)據(jù)。③列之間以半角逗號(hào)或制表符為分隔,一般為半角逗號(hào)。④每行開(kāi)頭無(wú)空格,第一行是屬性列,數(shù)據(jù)列之間用分隔符分隔,無(wú)空格,行間無(wú)空行。CSV文件特點(diǎn)Python的文件操作9.5使用CSV文件格式讀/寫(xiě)數(shù)據(jù)CSV文件介紹9.5.12.CSV文件的建立CSV文件是純文本文件,可以使用記事本按照CSV文件的規(guī)則來(lái)建立。使用微軟Excel工具錄入數(shù)據(jù),另存為CSV文件即可。3.Python的csv庫(kù)Python提供了一個(gè)讀寫(xiě)CSV文件的標(biāo)準(zhǔn)庫(kù),可以通過(guò)importcsv語(yǔ)句導(dǎo)入。csv庫(kù)包含了操作CSV格式文件最基本的功能,典型的方法是csv.reader()和csv.writer(),分別用于讀和寫(xiě)CSV文件。Python的文件操作9.5使用CSV文件格式讀/寫(xiě)數(shù)據(jù)讀/寫(xiě)CSV文件9.5.21.數(shù)據(jù)的維度描述一維數(shù)據(jù)即線(xiàn)性結(jié)構(gòu),也叫線(xiàn)性表。二維數(shù)據(jù)即關(guān)系,與數(shù)學(xué)中的二維矩陣類(lèi)似,用表格方式組織。多維數(shù)據(jù)由鍵值對(duì)類(lèi)型的數(shù)據(jù)構(gòu)成,采用對(duì)象方式組織,屬于維度更高的數(shù)據(jù)組織方式。lst1=["a","b","1",100]tup1=(1,3,5,7,9)lst2=[[1,2,3,4],["a","b","c"],[-9,-37,100]]NameDEPEngMathChineseRose法學(xué)897865Mike歷史564460John數(shù)學(xué)456567"成績(jī)單":[

{"姓名":"Rose",

"專(zhuān)業(yè)":"計(jì)算機(jī)",

"score":"78"

}

{"姓名":"Mike",

"專(zhuān)業(yè)":"法學(xué)",

"score":"78"

}

{"姓名":"John"

"專(zhuān)業(yè)":"歷史",

"score":"90"

}]tup2=(((1,2,3),('a','b','c'),((-100,-200),('ab','bc')))Python的文件操作9.5使用CSV文件格式讀/寫(xiě)數(shù)據(jù)讀/寫(xiě)CSV文件9.5.22.向csv文件中寫(xiě)入和讀取一維數(shù)據(jù)用列表變量保存一維數(shù)據(jù),可以使用字符串的join()方法構(gòu)成逗號(hào)分隔的字符串,再使用write()方法保存到CSV文件中。讀取CSV文件中的一維數(shù)據(jù),即讀取一行數(shù)據(jù),使用read()方法讀取即可,也可以將文件的內(nèi)容讀取到列表中。例9-163.向csv文件中寫(xiě)入和讀取二維數(shù)據(jù)CSV模塊中的reader()和writer()函數(shù)用于創(chuàng)建csv.writer對(duì)象和csv.writer對(duì)象,writerow()方法可以將一行數(shù)據(jù)寫(xiě)入CSV文件,也可以使用csv.writer對(duì)象的writerows()方法將一個(gè)二維列表寫(xiě)入CSV文件csv.reader對(duì)象。例9-17Python的文件操作9.6文件操作的應(yīng)用為文本文件添加行號(hào)基本思路:遍歷文件的每一行,然后使用enumerate()函數(shù)為文本文件添加行號(hào)。enumerate()函數(shù)的功能是將一個(gè)可遍歷的數(shù)據(jù)對(duì)象(如列表、元組或字符串)組合為一個(gè)索引序列,同時(shí)列出數(shù)據(jù)和索引,通常應(yīng)用在for循環(huán)中。讀取一行,并添加行號(hào)后,再寫(xiě)入新文件中。filename=input("請(qǐng)輸入要添加行號(hào)的文件名:")filename2=input("請(qǐng)輸入新生成的文件名:")sourcefile=open(filename,'r',encoding="utf-8")targetfile=open(filename2,'w',encoding="utf-8")linenumber=""for(num,value)inenumerate(sourcefile):ifnum<9:linenumber=str(num+1)+""else:linenumber=str(num+1)str1=linenumber+""+value#print(str1)targetfile.write(str1)sourcefile.close()targetfile.close()Python的文件操作9.6文件操作的應(yīng)用輸入日志的程序fromdatetimeimportdatetime

filename=input("請(qǐng)輸入日志文件名:")file=open(filename,'a')print("請(qǐng)輸入日志,exit結(jié)束")s=input("log:")whiles.lower()!="exit":file.write("\n"+s)file.write("\n----------------------\n")file.flush()s=input("log:")file.write("\n====="+str(datetime.now())+"=====\n")file.close()3.CSV文件中的數(shù)據(jù)排序讀取score.csv文件,輸出按平均成績(jī)降序排列的學(xué)生信息。要點(diǎn)如下。(1)讀取CSV文件。(2)定義空字典dicts,將score.csv文件內(nèi)容以課程為關(guān)鍵字寫(xiě)入dicts。字典dicts的key是Name,value是三門(mén)課程的平均成績(jī)。(3)注意需要跳過(guò)表頭(表的第1行),代碼中使用變量i控制不處理表頭。(4)將字典轉(zhuǎn)化為列表,排序輸出。例9-21Python的文件操作9.7利用AI工具學(xué)習(xí)文件編碼方式理解文件的編碼方式是學(xué)習(xí)文件操作的基礎(chǔ)。文件編碼涉及Unicode、UTF-8、UTF-16、GB2312、GBK等概念。我們可以咨詢(xún)AI工具,并加以分析。根據(jù)學(xué)習(xí)中遇到的常見(jiàn)問(wèn)題,使用DeepSeek工具,形成如下追問(wèn)。(1)Unicode編碼方案有哪些優(yōu)點(diǎn)和缺點(diǎn)?(2)Unicode編碼方案與UTF-8是什么關(guān)系?(3)GB2312與Unicode關(guān)系?(4)""""Unicode是一種2字節(jié)的計(jì)算機(jī)字符編碼""",這句話(huà)正確碼?知識(shí)點(diǎn)應(yīng)用向DeepSeek提問(wèn)異常處理10.1異常處理概述其一其二其三引入異常處理機(jī)制后,使得異常處理代碼和正常執(zhí)行的程序代碼分開(kāi),增加了程序的清晰性、可讀性,明晰了程序的流程??梢詫?duì)產(chǎn)生的各種異常事件進(jìn)行分類(lèi)管理,也可以對(duì)多個(gè)異進(jìn)行統(tǒng)一處理,具有相當(dāng)?shù)撵`活性。發(fā)生異常后,可以從try……except之間的代碼段中快速定位異常出現(xiàn)的位置,提高異常處理的效率。異常(Exception)就是程序在運(yùn)行過(guò)程中發(fā)生的,由于硬件故障、軟件設(shè)計(jì)錯(cuò)誤、運(yùn)行環(huán)境不滿(mǎn)足等原因?qū)е碌某绦蝈e(cuò)誤。比如網(wǎng)絡(luò)中斷、文件找不到等。代碼運(yùn)行時(shí)如果發(fā)生了異常,將生成代表該異常的一個(gè)對(duì)象,并交由Python解釋器尋找相應(yīng)的代碼來(lái)處理這一異常。異常的概念10.1.1異常處理10.1異常處理概述異常示例10.1.2異常處理10.1異常處理概述Python的異常類(lèi)10.1.3Python中所有的異常類(lèi)都是Exception的子類(lèi)。Exception類(lèi)定義在exception模塊中,該模塊是Python的內(nèi)置模塊,用戶(hù)可以直接使用。1.NameError

嘗試訪(fǎng)問(wèn)一個(gè)未聲明的變量,會(huì)引發(fā)NameError異常。2.ZeroDivisionError

當(dāng)除數(shù)為零的時(shí)候,會(huì)引發(fā)ZeroDivisionError異常。3.IndexError

當(dāng)引用序列中不存在的索引時(shí),會(huì)引引發(fā)IndexError異常。4.KeyError

當(dāng)使用映射中不存在的鍵時(shí),會(huì)引發(fā)Keyerror異常。5.AttributeError

當(dāng)嘗試訪(fǎng)問(wèn)未知的對(duì)象屬性時(shí),會(huì)引發(fā)AttributeError異常。6.SyntaxError

當(dāng)解釋器發(fā)現(xiàn)語(yǔ)法錯(cuò)誤時(shí),會(huì)引發(fā)SyntaxError異常。7.FileNotFoundError

試圖打開(kāi)不存在的文件時(shí),會(huì)引發(fā)FileNotFoundError異常。異常處理10.2異常處理機(jī)制拋出異常捕獲異常程序執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常對(duì)象,該異常對(duì)象被提交給Python解釋器,該過(guò)程為拋出異常。拋出異常也可以由用戶(hù)程序自行定義。當(dāng)Python解釋器接收到異常對(duì)象時(shí),會(huì)尋找處理這一異常的代碼并處理。系統(tǒng)終止如果Python解釋器找不到可以處理異常的方法,則運(yùn)行時(shí)系統(tǒng)終止,應(yīng)用程序退出。異常處理10.2異常處理機(jī)制try:

語(yǔ)句塊exceptExceptionName1:

異常處理代碼1exceptExceptionName2:

異常處理代碼2……(1)try語(yǔ)句

指定捕獲異常的范圍,由try限定的代碼塊中的語(yǔ)句在執(zhí)行過(guò)程中,可能會(huì)生成異常對(duì)象并拋出。(2)except語(yǔ)句

每個(gè)try代碼塊必須有一個(gè)或多個(gè)except語(yǔ)句,用于處理try代碼塊中所生成的異常。except語(yǔ)句后的參數(shù)指明能夠捕獲的異常類(lèi)型。except塊中包含的是異常處理的代碼。try…except語(yǔ)句10.2.1try:x=int(input("請(qǐng)輸入數(shù)據(jù):"))print(100/x)exceptZeroDivisionError:print("異常信息:除數(shù)不能為0")exceptValueError:print("異常信息:輸入數(shù)據(jù)必須是拉伯?dāng)?shù)字")異常處理10.2異常處理機(jī)制try:

語(yǔ)句塊exceptExceptionName:

異常處理代碼……

#except可以有多條語(yǔ)句else:

無(wú)異常發(fā)生時(shí)的語(yǔ)句塊finally:

必須處理的語(yǔ)句塊1.else語(yǔ)句當(dāng)try語(yǔ)句沒(méi)有捕獲到任何異常信息,將不執(zhí)行except語(yǔ)句塊,而是執(zhí)行else語(yǔ)句塊。2.finally語(yǔ)句

為異常處理提供一個(gè)統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。finally塊中的語(yǔ)句一定會(huì)被執(zhí)行。else和finally語(yǔ)句10.2.2fname="ex1005.py"try:file=open(fname,"r",encoding="utf-8")forlineinfile:print(line,end="")exceptFileNotFoundError:print("您要讀取的文件不存在,請(qǐng)確認(rèn)")else:print("文件讀取正常結(jié)束")finally:print("文件正常關(guān)閉")iffile!=None:file.close()異常處理10.2異常處理機(jī)制捕獲所有異常10.2.3如果用戶(hù)編寫(xiě)程序質(zhì)量低,一個(gè)程序中可能存在多處錯(cuò)誤,逐一捕捉這些異常會(huì)非常繁瑣,而且也沒(méi)有必要。為了解決程序中會(huì)可能存在多處錯(cuò)誤情況,可以在except語(yǔ)句中不指明異常型,這樣它就可以處理任何類(lèi)型的異常。numbers=[0,0,0]try:numbers[0]=int(input("請(qǐng)輸入第1個(gè)數(shù):"))numbers[1]=int(input("請(qǐng)輸入第2個(gè)數(shù):"))print(numbers[0]/numbers[1])except:print("程序出現(xiàn)異常")numbers=[0,0,0]try:numbers[0]=int(input("請(qǐng)輸入第1個(gè)數(shù):"))numbers[1]=int(input("請(qǐng)輸入第2個(gè)數(shù):"))print(numbers[0]/numbers[1])exceptExceptionasresult:print("程序出現(xiàn)異常:",result)異常處理10.3拋出異常raise異常類(lèi)

#拋出異常,并隱式地創(chuàng)建類(lèi)對(duì)象raise異常類(lèi)對(duì)象

#拋出異常,創(chuàng)建異常類(lèi)的實(shí)例對(duì)象>>>raiseNameErrorTraceback(mostrecentcalllast):File"<pyshell#15>",line1,in<module>raiseNameErrorNameError>>>nerror=NameError()>>>raisenerror當(dāng)使用raise語(yǔ)句拋出異常時(shí),還可以給異常類(lèi)指定描述信息。>>>raiseIndexError("索引超出范圍")raise語(yǔ)句10.3.1異常處理10.3拋出異常拋出異常示例10.3.2程序中也可以?huà)伋霎惓?但需要生成異常對(duì)象。生成異常對(duì)象一般都是通過(guò)raise語(yǔ)句實(shí)現(xiàn)的。模擬現(xiàn)金支付功能,當(dāng)支付額度大于5000時(shí),拋出ValueError異常;當(dāng)額度低于5000時(shí),按照額度的10%扣稅。defpayOut(amount):if(amount>5000):raiseValueError("Theamountoutofbounds!")else:returnamount-amount*0.1if__name__=='__main__':pay=payOut(4000)print("實(shí)際支出金額是:",pay)pay=payOut(5200)print("實(shí)際支出金額是:",pay)異常處理10.4斷言與上下文管理assert語(yǔ)句又稱(chēng)作斷言語(yǔ)句,指的是用戶(hù)期望滿(mǎn)足指定的條件。當(dāng)用戶(hù)定義的約束條件不滿(mǎn)足的時(shí)候,它會(huì)觸發(fā)AssertionError異常,所以assert語(yǔ)句可以當(dāng)作條件式的raise語(yǔ)句。assert邏輯表達(dá)式,description斷言10.4.1try:x=int(input("請(qǐng)輸入第

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論