《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目10、11 異常處理、模塊應(yīng)用_第1頁
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目10、11 異常處理、模塊應(yīng)用_第2頁
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目10、11 異常處理、模塊應(yīng)用_第3頁
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目10、11 異常處理、模塊應(yīng)用_第4頁
《Python程序設(shè)計(jì)》 課件 張小志 項(xiàng)目10、11 異常處理、模塊應(yīng)用_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項(xiàng)目10異常處理了解Python語言中異常的定義01了解Python常見內(nèi)置異常類02認(rèn)識Python異常信息的含義03知識目標(biāo)熟悉Python語言的異常處理語句04熟悉Python語言中主動(dòng)拋出異常的方法05熟悉Python語言自定義異常類的語法06能夠編寫語句引發(fā)特定異常01能夠熟練分析異常消息并找出異常原因和異常位置02能夠編寫帶有異常處理功能的程序03能力目標(biāo)能夠按條件主動(dòng)拋出異常04能夠按功能需求自定義異常05任務(wù)提出01任務(wù)分析02知識準(zhǔn)備03任務(wù)1密碼復(fù)雜度檢查任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹形圖案任務(wù)提出Part.01提出任務(wù)

在用戶注冊模塊中,對用戶輸入的密碼進(jìn)行復(fù)雜度檢查,如果密碼滿足復(fù)雜度要求,則允許用戶注冊;否則視為發(fā)生異常情況,提示用戶密碼不符合復(fù)雜度要求,并要求用戶重新設(shè)置密碼。編寫Python程序,通過異常捕獲語句實(shí)現(xiàn)檢測密碼復(fù)雜度是否符合要求的功能,并處理該異常。任務(wù)分析Part.02任務(wù)分析1.創(chuàng)建Python程序文件pwdcheck.py。2.以一般性、常見性為標(biāo)準(zhǔn),明確一個(gè)密碼復(fù)雜度規(guī)則。3.設(shè)計(jì)算法,檢驗(yàn)密碼字符串是否滿足密碼復(fù)雜度規(guī)則。4.定義一個(gè)適當(dāng)?shù)漠惓n愋?,以便于在密碼不滿足復(fù)雜度規(guī)則時(shí),拋出異常。5.捕獲異常并處理異常情況。6.運(yùn)行測試程序,確認(rèn)異常情況是否被捕獲。本任務(wù)主要實(shí)現(xiàn)的是密碼復(fù)雜度的檢查,根據(jù)密碼復(fù)雜度的規(guī)則要求,對不符合要求的密碼,主動(dòng)拋出異常進(jìn)行專門處理,具體任務(wù)實(shí)施分析如下:知識準(zhǔn)備Part.03認(rèn)識異常01處理異常02異常的拋出和自定義異常類03知識準(zhǔn)備異常概述01常見異常類02異常類繼承關(guān)系0310.1認(rèn)識異常所謂異常是指Python程序執(zhí)行過程中出現(xiàn)無法正常處理程序的情況。引發(fā)異常有各種各樣的原因,例如程序語法錯(cuò)誤、計(jì)算錯(cuò)誤、命名錯(cuò)誤等,另外也有根據(jù)程序功能設(shè)計(jì)而主動(dòng)拋出的異常。異常概述在Python中定義了異常類,每當(dāng)發(fā)生異常時(shí),都會(huì)創(chuàng)建一個(gè)異常對象。如果這個(gè)異常對象沒有被處理和捕捉,程序就會(huì)終止執(zhí)行,并回溯(Traceback)顯示異常報(bào)告。異常概述回溯產(chǎn)生異常的代碼位置異常類型:“除零錯(cuò)”異常描述:“除數(shù)為零”

SyntaxError異常常見異常類NameError異常常見異常類

TypeError異常常見異常類KeyError異常常見異常類IndexError異常常見異常類ValueError異常常見異常類常見異常類異常類說明異常類說明BaseException所有異常的基類NameError未聲明/初始化對象(沒有屬性)SystemExit解釋器請求退出UnboundLocalError訪問未初始化的本地變量KeyboardInterrupt用戶中斷執(zhí)行ReferenceError引用錯(cuò)誤GeneratorExit生成器發(fā)生異常通知退出RuntimeError一般的運(yùn)行時(shí)錯(cuò)誤Exception常規(guī)異常的基類NotImplementedError尚未實(shí)現(xiàn)的方法StopIteration迭代器沒有更多的值SyntaxErrorPython語法錯(cuò)誤StandardError所有內(nèi)建標(biāo)準(zhǔn)異?;怚ndentationError縮進(jìn)錯(cuò)誤ArithmeticError所有數(shù)值計(jì)算錯(cuò)誤基類TabErrorTab和空格混用FloatingPointError浮點(diǎn)計(jì)算錯(cuò)誤SystemError一般的解釋器系統(tǒng)錯(cuò)誤常見異常類異常類說明異常類說明OverflowError數(shù)值運(yùn)算超出最大限制TypeError對類型無效的操作ZeroDivisionError除(或取模)零ValueError傳入無效的參數(shù)AssertionError斷言語句失敗UnicodeErrorUnicode相關(guān)的錯(cuò)誤AttributeError對象沒有這個(gè)屬性UnicodeDecodeErrorUnicode解碼時(shí)的錯(cuò)誤EOFErrorEOF標(biāo)記錯(cuò)誤UnicodeEncodeErrorUnicode編碼時(shí)錯(cuò)誤EnvironmentError操作系統(tǒng)錯(cuò)誤的基類UnicodeTranslateErrorUnicode轉(zhuǎn)換時(shí)錯(cuò)誤IOError輸入/輸出操作失敗Warning警告的基類OSError操作系統(tǒng)錯(cuò)誤DeprecationWarning關(guān)于被棄用的特征的警告常見異常類異常類說明異常類說明OverflowWarning溢出警告FutureWarning將來語義會(huì)有改變的警告ImportError導(dǎo)入模塊/對象失敗WindowsError系統(tǒng)調(diào)用失敗LookupError無效數(shù)據(jù)查詢的基類PendingDeprecationWarning關(guān)于特性將會(huì)被廢棄的警告IndexError序列中沒有此索引(index)RuntimeWarning可疑的運(yùn)行時(shí)行為警告KeyError映射中沒有這個(gè)鍵SyntaxWarning可疑的語法警告MemoryError內(nèi)存溢出錯(cuò)誤UserWarning用戶代碼生成的警告Python定義了一個(gè)名為BaseException的基類,用于概括所有的異常種類,其子類包括SystemExit、KeyboardInterrupt、GeneratorExit和Exception。其中前三個(gè)是系統(tǒng)級異常,其它異常(如Python內(nèi)置常見異常、用戶自定義異常),都從Exception或其子類派生。異常類繼承關(guān)系try-except語句01else語句和finally語句0210.2處理異常在Python中,異常處理可以通過try-except語句來實(shí)現(xiàn)。當(dāng)你認(rèn)為程序可能發(fā)生錯(cuò)誤時(shí),可以使用try來嘗試運(yùn)行代碼,并通過except來告訴程序如果引發(fā)了異常該怎么辦。try-except語句try:語句塊0#可能引發(fā)異常的操作except[異常類型]:語句塊1#發(fā)生異常時(shí)執(zhí)行的操作try語句塊0except語句塊1try語句塊0過程中發(fā)生異常yesnotry-except語句無異常除零異常其他異常處理異常類型:“除零錯(cuò)”try-except語句無異常除零異常不區(qū)分異常類型數(shù)值異常……多分支except語句try-except語句try:

語句塊0#可能引發(fā)異常的操作except異常類型1:

語句塊1#發(fā)生異常1時(shí)執(zhí)行的處理動(dòng)作except異常類型2:

語句塊2#發(fā)生異常2時(shí)執(zhí)行的處理動(dòng)作……except:

語句塊n#其它未定義的異常處理動(dòng)作多分支except語句try-except語句try-except語句無異常除零異常分頭處理各類異常數(shù)值異常其他異?!赑ython的異常處理中,如果有語句依賴于try語句的成功執(zhí)行才能繼續(xù)執(zhí)行,那么放在else代碼塊中執(zhí)行。無論出現(xiàn)異常處理還是正常執(zhí)行都要執(zhí)行的清理語句放在finally代碼塊中執(zhí)行,通常是一些收尾的工作,如釋放對象等。else語句和finally語句try:語句塊0#可能引發(fā)異常的操作except:語句塊1#發(fā)生異常時(shí)執(zhí)行的操作else:語句塊2#依賴try語句塊執(zhí)行的操作finally:語句塊3#收尾操作except語句和finally語句try語句塊except語句塊else語句塊finally語句塊try語句塊是否發(fā)生異常yesnoexcept語句和finally語句有異常無異常raise主動(dòng)拋出異常01assert聲明斷言02自定義異常類0310.3異常的拋出和自定義異常類有時(shí)候底層程序捕獲到了異常,但暫時(shí)不想在當(dāng)前層次做出異常處理,此時(shí)也可以主動(dòng)拋出異常,讓其上層的調(diào)用者進(jìn)行處理。除了系統(tǒng)中內(nèi)置的一些異常之外,也可以根據(jù)業(yè)務(wù)需要拋出自定義的異常。raise主動(dòng)拋出異常raise[異常類型名('異常描述信息')]不帶異常類型的raise語句直接引發(fā)最近發(fā)生的異常。raise主動(dòng)拋出異常使用raise-from語句在一個(gè)異常中拋出另一個(gè)異常。raise主動(dòng)拋出異常raise異常類型2或別名2from異常類型1或別名1assert語句可以視為有條件的raise語句。使用assert聲明斷言,期望程序滿足指定條件,如果不滿足,則拋出AssertionError異常,并描述異常信息。主要作用是幫助調(diào)試程序。assert聲明斷言assert邏輯表達(dá)式,'描述信息'ifnot邏輯表達(dá)式:raiseAssertionError('描述信息')等價(jià)于assert聲明斷言雖然Python已經(jīng)內(nèi)置了幾十種不同的異常類,但用戶仍可以根據(jù)業(yè)務(wù)邏輯自定義新的異常類。自定義異常類BaseException異常的基類KeyboardInterrupt鍵盤中斷SystemExit解釋器退出Exception異常NameError變量未定義ValueError參數(shù)無效IndexError索引錯(cuò)誤自定義異?!远x異常類,通常遵循內(nèi)置異常類的命名習(xí)慣以“Error”結(jié)尾。根據(jù)需要,可以重寫構(gòu)造方法__init__和字符串方法__str__等。自定義異常類class異常類名(Exception):def__init__(self,msg):self.msg=msgdef__str__(self):returnself.msg任務(wù)實(shí)現(xiàn)Part.04分析代碼01編寫代碼02程序測試03任務(wù)實(shí)現(xiàn)分析代碼密碼規(guī)則

代碼思路長度在8至20字符之間必須包括數(shù)字、大寫字母、小寫字母、特殊符號中的三種。自定義密碼格式錯(cuò)誤異常PwdError定義密碼字符集使用input()輸入測試密碼使用try-except語句檢驗(yàn)密碼是否符合密碼規(guī)則要求。如果符合,則提示“密碼強(qiáng)度高”;如果不符合,則拋出自定義異常PwdError,并提示“密碼格式錯(cuò)誤”1.自定義異常類編寫代碼2.定義密碼字符集:大寫字母、小寫字母、特殊符號、數(shù)字編寫代碼3.輸入密碼,分別統(tǒng)計(jì)密碼串中各類字符的數(shù)量編寫代碼4.嘗試判斷密碼是否超過三種且長度在8-20之間,如果是,輸出“密碼強(qiáng)度高”;如果不是,則拋出PwdError異常。異常的處理方式是輸出該異常的文本。編寫代碼程序測試復(fù)雜密碼簡單密碼任務(wù)總結(jié)Part.05通過本任務(wù)的學(xué)習(xí),掌握了Python語言中有關(guān)異常的概念、常見的異常類以及異常的處理方法。常見異常分類使用try-except-else-finally語句捕捉并處理異常。使用raise語句拋出不滿足密碼復(fù)雜度條件的異常。通過子類繼承的方式自定義異常類。不要過度使用異常處理。盡量捕獲指定類型的異常捕獲異常后,應(yīng)該進(jìn)行適當(dāng)?shù)奶幚?,而不是簡單地忽略它避免在異常處理中引發(fā)新的異常對于重要的異常,應(yīng)該記錄相關(guān)信息合理使用斷言assert語句模塊應(yīng)用理解模塊、包的概念01了解模塊的分類02理解模塊的作用03知識目標(biāo)熟悉自定義模塊的方法04了解常見的第三方模塊05能夠掌握模塊的調(diào)用01能夠完成模塊的制作02能夠使用Python包來組織模塊03能力目標(biāo)能夠熟練掌握模塊的發(fā)布和安裝04能夠?qū)氩⒄{(diào)用第三方模塊05任務(wù)提出01任務(wù)分析02知識準(zhǔn)備03任務(wù)1簡單網(wǎng)絡(luò)爬蟲任務(wù)實(shí)現(xiàn)04任務(wù)總結(jié)05任務(wù)1打印樹形圖案任務(wù)提出Part.01任務(wù)提出Part.01任務(wù)提出運(yùn)用PyCharm開發(fā)工具編寫Python程序,對網(wǎng)頁內(nèi)容進(jìn)行爬取,并分析出其中的關(guān)鍵詞。以新聞《國務(wù)院辦公廳關(guān)于進(jìn)一步做好高校畢業(yè)生等青年就業(yè)創(chuàng)業(yè)工作的通知》為例。任務(wù)提出爬取該文的內(nèi)容,分析出關(guān)鍵詞出現(xiàn)的頻率,如圖所示。任務(wù)分析Part.02任務(wù)分析1.下載并安裝第三方包requests、jieba、lxml、bs4。2.創(chuàng)建Python程序webcrawler.py。3.導(dǎo)入requests、jieba、bs4。4.獲取目標(biāo)URL的HTML文檔。5.提取出全部頁面內(nèi)容存入TXT文件中。6.用精確模式對頁面內(nèi)容進(jìn)行分詞處理。7.統(tǒng)計(jì)每個(gè)分詞出現(xiàn)的個(gè)數(shù)。8.按分詞個(gè)數(shù)進(jìn)行降序排序,輸出前10個(gè)分詞作為關(guān)鍵字。9.運(yùn)行測試程序,查看輸出的關(guān)鍵字及其個(gè)數(shù)。本任務(wù)主要實(shí)現(xiàn)的是網(wǎng)頁內(nèi)容的爬取及關(guān)鍵詞分析,可以借助第三方模塊requestsjieba等來獲取頁面內(nèi)容、提取關(guān)鍵字。具體的任務(wù)實(shí)施分析如下:知識準(zhǔn)備Part.03模塊簡介01模塊導(dǎo)入02自定義模塊03知識準(zhǔn)備包04常用庫05模塊簡介Part.01Python模塊(Module),是一個(gè)Python文件,以.py結(jié)尾,包含了Python對象定義和Python語句。模塊的概念每一個(gè)以擴(kuò)展名py結(jié)尾的python源代碼文件都是一個(gè)模塊。模塊名同樣也是一個(gè)標(biāo)識符,需要符合標(biāo)識符的命名規(guī)范。在模塊中定義的全局變量、函數(shù)、類都可以提供給其他代碼調(diào)用。通過使用模塊,可以將代碼分離成邏輯單元,促進(jìn)模塊化編程。Python中的模塊供分為三類,即內(nèi)置模塊、第三方模塊、以及自定義模塊。內(nèi)置模塊:內(nèi)置模塊是Python官方開發(fā)者幫我們設(shè)計(jì)好的,安裝好Python環(huán)境我們就可以直接使用這些內(nèi)置模塊。模塊的分類常用的內(nèi)置模塊有:os:包含普遍的操作系統(tǒng)功能sys:提供了一系列有關(guān)Python運(yùn)行環(huán)境的變量和函數(shù)random:用于生成隨機(jī)數(shù)time::主要包含各種提供日期、時(shí)間功能的類和函數(shù)第三方模塊:第三方模塊是Python開發(fā)者提前開發(fā)好的模塊,需要安裝對應(yīng)的庫才能使用該模塊中的函數(shù)等。模塊的分類常用的第三方模塊有:requests:常用的http模塊,常用于發(fā)送http請求scrapy:在網(wǎng)絡(luò)爬蟲領(lǐng)域必不可少pygame:常用于2D游戲的開發(fā)numpy:為Python提供了很多高級的數(shù)學(xué)方法Flask:輕量級開源Web開發(fā)框架,靈活、開發(fā)周期短Django:一站式開源Web開發(fā)框架,遵循MVC設(shè)計(jì)自定義模塊:自定義模塊是開發(fā)者根據(jù)實(shí)際需求開發(fā)的模塊,通常是對某段邏輯或某些函數(shù)進(jìn)行封裝,供其他函數(shù)調(diào)用,使用時(shí)我們需要將其引入到我們的項(xiàng)目中。模塊的分類

需要注意的是,自定義模塊的命名一定不能與內(nèi)置模塊重名,否則會(huì)將內(nèi)置模塊覆蓋。模塊的導(dǎo)入Part.02導(dǎo)入整個(gè)模塊模塊的導(dǎo)入通過import關(guān)鍵字可以將整個(gè)模塊導(dǎo)入進(jìn)來,導(dǎo)入后可以通過模塊名來訪問其中的函數(shù)、類和變量導(dǎo)入整個(gè)模塊使用import語句導(dǎo)入語法格式是:模塊名.函數(shù)名()/類名使用import語句導(dǎo)入的語法格式是:import模塊1[,模塊2[,...模塊3]]import語句支持一次導(dǎo)入多個(gè)模塊,每個(gè)模塊中間用逗號分割,導(dǎo)入之后可以通過“.”來使用模塊中的函數(shù)或類。導(dǎo)入整個(gè)模塊例:使用import語句導(dǎo)入語法格式是:模塊名.函數(shù)名()/類名importtime

#導(dǎo)入模塊timeimportrandom,math

#導(dǎo)入模塊random、mathtime.sleep(1)

#調(diào)用time模塊中的sleep()函數(shù)random.randint(1,100)#調(diào)用random模塊中的randint()函數(shù)math.sqrt(2)

#調(diào)用math模塊中的sqrt()函數(shù)從模塊中導(dǎo)入特定成員模塊的導(dǎo)入可以使用from...import語句從模塊中導(dǎo)入特定成員,即可以導(dǎo)入模塊中特定的函數(shù)、類或變量,而不是整個(gè)模塊從模塊中導(dǎo)入特定成員使用from...import...語句導(dǎo)入語法格式是:from模塊名import*使用import語句導(dǎo)入的語法格式是:from模塊名import函數(shù)/類/變量from...import...語句也支持一次導(dǎo)入多個(gè)函數(shù)、類和變量,多個(gè)函數(shù)、類和變量之間用逗號隔開。如果使用通配符*,可以導(dǎo)入該模塊的全部內(nèi)容。從模塊中導(dǎo)入特定成員例:使用from...import語句導(dǎo)入特定成員語法格式是:模塊名.函數(shù)名()/類名frommathimportsqrt#導(dǎo)入math模塊中的sqrt()函數(shù)#直接使用函數(shù),無需模塊名前綴print(sqrt(16))#輸出:4.0導(dǎo)入模塊中的所有成員模塊的導(dǎo)入使用from...import*語句,可以導(dǎo)入該模塊的所有成員。但是,通常不推薦使用這種方法進(jìn)行導(dǎo)入,因?yàn)樗赡軐?dǎo)致命名沖突,使代碼難以理解和維護(hù)。導(dǎo)入模塊所有成員例:導(dǎo)入模塊所有成員語法格式是:模塊名.函數(shù)名()/類名frommathimport*print(sqrt(9))#輸出:3.0使用as關(guān)鍵字為模塊或成員指定別名模塊的導(dǎo)入當(dāng)模塊名或成員名與現(xiàn)有名稱沖突,或者名稱太長不便使用時(shí),可以使用as關(guān)鍵字為它們指定別名。使用as關(guān)鍵字為模塊或成員指定別名例:使用as關(guān)鍵字為模塊或成員指定別名語法格式是:模塊名.函數(shù)名()/類名importmathasm#使用別名訪問模塊中的函數(shù)print(m.sqrt(9))#輸出:3.0#為導(dǎo)入的函數(shù)指定別名frommathimportsqrtassqprint(sq(9))#輸出:3.0導(dǎo)入自定義模塊模塊的導(dǎo)入如果創(chuàng)建了自定義模塊(.py文件),并且該模塊位于當(dāng)前工作目錄或Python的搜索路徑中,則可以像導(dǎo)入標(biāo)準(zhǔn)模塊一樣導(dǎo)入該模塊。導(dǎo)入自定義模塊例:導(dǎo)入自定義模塊語法格式是:模塊名.函數(shù)名()/類名#假設(shè)在當(dāng)前工作目錄下存在自定義模塊mymodule.pyimportmymodulemymodule.fun()#調(diào)用模塊中的函數(shù)設(shè)置搜索路徑在python中使用import語句導(dǎo)入模塊時(shí),會(huì)從當(dāng)前工作目錄或者搜索路徑中查找模塊,搜索路徑由sys.path列表控制,可以通過設(shè)置這個(gè)列表來添加或刪除搜索路徑。設(shè)置搜索路徑1.在代碼中動(dòng)態(tài)修改語法格式是:模塊名.函數(shù)名()/類名在Python代碼中直接動(dòng)態(tài)修改列表sys.path的值importsyssys.path.append('/path/directory')在列表的開頭添加路徑,可以使用insert方法sys.path.insert(0,'/path/directory')設(shè)置搜索路徑2.使用環(huán)境變量設(shè)置語法格式是:模塊名.函數(shù)名()/類名可以通過使用PYTHONPATH環(huán)境變量來設(shè)置搜索路徑,在不同的目錄之間用逗號分隔。在Windows系統(tǒng)中,設(shè)置命令如下:setPYTHONPATH=D:\path\directory;%PYTHONPATH%設(shè)置搜索路徑3.使用.pth文件設(shè)置語法格式是:模塊名.函數(shù)名()/類名可以在Python安裝路徑下Lib\site-packages文件夾中創(chuàng)建一個(gè)擴(kuò)展名為.pth的文件,將所有的模塊搜索路徑添加進(jìn)去,每個(gè)路徑占一行。.pth文件內(nèi)容示例如下:D:\Chapter11D:\Chapter11\DirD:\Chapter11\Dir\Dir自定義模塊Part.03Python自定義模塊是一種由用戶創(chuàng)建的Python代碼文件,用于組織、封裝和重用可執(zhí)行的代碼塊。通過自定義模塊,用戶可以將相關(guān)的功能和變量組織在一起,使代碼更易于維護(hù)、擴(kuò)展和復(fù)用。自定義模塊Python中每個(gè)文件都可以作為一個(gè)模塊,文件名即為模塊名。自定義模塊對應(yīng)的Python文件應(yīng)存放在當(dāng)前工作目錄或者Python的搜索路徑中,否則在導(dǎo)入時(shí)應(yīng)聲明路徑文件夾。自定義模塊例:自定義模塊mymodule,步驟如下:1)在當(dāng)前工作目錄中創(chuàng)建Python文件mymodule.py,作為模塊文件。在模塊文件mymodule.py中定義變量age和函數(shù)intro()#mymodule.pyage=13defintro():print("我今年%d歲了。"%age)自定義模塊2)在當(dāng)前工作目錄中創(chuàng)建新的Python文件myage.py,導(dǎo)入自定義模塊mymodule,并調(diào)用intro()函數(shù)#myage.pyimportmymodulero()自定義模塊3)運(yùn)行程序myage.py,輸出結(jié)果如下:我今年13歲了。自定義模塊導(dǎo)入模塊后,還可以使用dir()函數(shù)查看導(dǎo)入模塊中包含的函數(shù)、類和變量。importmymodule#導(dǎo)入mymodule模塊print(dir(mymodule))#使用dir()函數(shù)運(yùn)行代碼,輸出結(jié)果如下:['__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','age','intro']自定義模塊__builtins__:對Python內(nèi)置模塊的引用,該模塊在Python啟動(dòng)后首先加載,該模塊中的函數(shù)即內(nèi)置函數(shù),可以直接調(diào)用。__cached__:當(dāng)前模塊經(jīng)過編譯后生成的字節(jié)碼文件(.pyc)的路徑。__doc__:當(dāng)前模塊的文檔字符串。__file__:當(dāng)前模塊的完整文件路徑。模塊交互式可能未定義__file__。__loader__:用于加載模塊的加載器。__name__:當(dāng)前模塊的名字。如果模塊被直接運(yùn)行,那么__name__的值會(huì)是"__main__"。如果模塊是被導(dǎo)入的,那么__name__的值會(huì)是模塊的名字。__package__:當(dāng)前模塊所在的包名。如果沒有定義包,那么__package__值是None。__spec__:當(dāng)前模塊的規(guī)范,包括名稱、加載器、源文件等。內(nèi)置全局變量__all__屬性特殊屬性__all__是一個(gè)可選的列表,定義在模塊文件的頂層。當(dāng)使用from…import*語句導(dǎo)入模塊成員時(shí),__all__列表決定了哪些成員會(huì)被導(dǎo)入。如果沒有定義__all__屬性,那么使用from…import*語句將不會(huì)導(dǎo)入任何成員。使用__all__屬性是一種顯式控制模塊導(dǎo)出內(nèi)容的好方法,可以避免在from…import*時(shí)導(dǎo)入不必要的名字,減少命名沖突的風(fēng)險(xiǎn)。__all__屬性特殊屬性例:

使用__all__屬性1)創(chuàng)建模塊文件mymodule1.py,輸入如下代碼#mymodule1.py__all__=['add']#列表中包含add()函數(shù),不包括subtract()函數(shù)defadd(a,b):returna+bdefsubtract(a,b):returna-b__all__屬性特殊屬性例:

使用__all__屬性2)創(chuàng)建Python文件test.py,輸入如下代碼:#test.pyfrommymodule1import*#導(dǎo)入模塊mymodule1中的全部成員print(add(10,11))#調(diào)用函數(shù)add()print(subtract(22,5))#調(diào)用函數(shù)subtract()__all__屬性特殊屬性例:

使用__all__屬性3)運(yùn)行代碼文件test.py,結(jié)果如下所示:21NameError:name'subtract'isnotdefined從運(yùn)行結(jié)果可以看出,調(diào)用add()函數(shù)能正確輸出結(jié)果21,調(diào)用subtract()函數(shù)則出現(xiàn)函數(shù)未定義的異常。__name__屬性特殊屬性__name__是一個(gè)內(nèi)置屬性,它表示當(dāng)前模塊的名字。當(dāng)模塊被直接運(yùn)行時(shí),__name__的值被設(shè)置為"__main__"。而當(dāng)模塊被導(dǎo)入到其他模塊時(shí),__name__的值則是模塊自身的名字。__name__屬性經(jīng)常用于區(qū)分模塊是直接運(yùn)行還是被導(dǎo)入,以便執(zhí)行不同的代碼塊。__name__屬性特殊屬性例:

使用__name__屬性1)創(chuàng)建模塊文件mymodule2.py,輸入如下代碼#mymodule2.pydeffunc():print("這是模塊直接運(yùn)行.")if__name__=="__main__":func()#在模塊被直接運(yùn)行時(shí)執(zhí)行else:print("這是模塊被導(dǎo)入后運(yùn)行的.")#在模塊被導(dǎo)入時(shí)執(zhí)行__name__屬性特殊屬性例:

使用__name__屬性2)直接運(yùn)行模塊文件mymodule2.py,輸出結(jié)果如下:這是模塊直接運(yùn)行.3)創(chuàng)建Python文件test1.py,輸入如下代碼:#test1.pyimportmymodule24)運(yùn)行代碼文件test1.py,輸出結(jié)果如下:這是模塊被導(dǎo)入后運(yùn)行的.包Part.04Python中的包是一種有層次的文件目錄結(jié)構(gòu),它定義了由多個(gè)模塊或子包組成的Python應(yīng)用程序執(zhí)行環(huán)境。包的主要目的是為了提供一種層次化的組織結(jié)構(gòu),以便更好地組織和管理Python代碼。通過包可以將相關(guān)的模塊和子包組織在一起,從而更好地管理和復(fù)用代碼。包包是一個(gè)包含__init__.py文件的目錄,該目錄下包含__init__.py文件和其它模塊或子包。__init__.py文件可以是一個(gè)空文件,也可以包含一些初始化代碼,但必須存在,否則包將成為一個(gè)普通的目錄。創(chuàng)建包創(chuàng)建目錄mypackage作為包目錄,在包目錄中創(chuàng)建包定義文件__init__.py,并將前面創(chuàng)建的模塊復(fù)制到該目錄中,結(jié)構(gòu)如圖所示。__init__.py文件在Python包中的主要作用如下:標(biāo)識目錄為Python包:當(dāng)目錄包含__init__.py文件時(shí),Python會(huì)將該目錄視為包。初始化包:__init__.py文件可以在包被導(dǎo)入時(shí)執(zhí)行一些初始化代碼,比如設(shè)置包的全局狀態(tài),或者執(zhí)行一些只需要在包被首次導(dǎo)入時(shí)運(yùn)行的操作。定義__all__:定義__all__列表以決定哪些模塊或?qū)ο髸?huì)被導(dǎo)入。如果__all__沒有被定義,那么frompackageimport*將不會(huì)導(dǎo)入任何內(nèi)容。簡化模塊的導(dǎo)入:在__init__.py文件中,可以導(dǎo)入包內(nèi)的其他模塊,并為其設(shè)置別名,這樣用戶就可以通過包名直接訪問這些模塊,而不需要知道實(shí)際路徑,有助于簡化模塊的導(dǎo)入和使用。包級別的變量和函數(shù):__init__.py文件也可以定義包級別的變量和函數(shù),這些變量和函數(shù)可以直接通過包名來訪問。創(chuàng)建包例:編輯包mypackage的__init__.py文件#mypackage/__init__.pyfrom.importmymodule#導(dǎo)入整個(gè)模塊mymodulefrom.mymodule1importaddassum#只導(dǎo)入模塊mymodule1的特定函數(shù),并設(shè)置別名__all__=['mymodule','sum']#定義__all__來控制frompackageimport*的行為package_a="這是包級別變量"#定義包級別變量defpackage_func():#定義包級別函數(shù)

print("這是包級別函數(shù)")創(chuàng)建包在Python中,包的導(dǎo)入本質(zhì)上是執(zhí)行導(dǎo)入包中的__init__.py文件。當(dāng)嘗試導(dǎo)入一個(gè)包時(shí),Python會(huì)根據(jù)sys.path中的目錄來尋找包中包含的子目錄。因此,確保包所在的目錄在sys.path中,或者包已經(jīng)被安裝到Python的site-packages目錄下,這樣才能正確導(dǎo)入包。導(dǎo)入包例:導(dǎo)入mypackage包importmypackage#導(dǎo)入整個(gè)包ro()#調(diào)用模塊mymodule的intro()函數(shù)print(mypackage.sum(2,3))#通過別名sum調(diào)用模塊mymodule1中的add()函數(shù)print(mypackage.package_a)#訪問包級別的變量mypackage.package_func()#調(diào)用包級別的函數(shù)導(dǎo)入包例:導(dǎo)入mypackage包frommypackageimportmymodule,sum,package_a,package_func#使用導(dǎo)入的部分ro()#調(diào)用模塊mymodule的intro()函數(shù)print(sum(2,3))#通過別名sum調(diào)用模塊mymodule1中的add()函數(shù)print(package_a)package_func()導(dǎo)入包1.使用pip命令安裝第三方包pip是Python的包管理工具,它允許從PythonPackageIndex(PyPI)安裝和管理額外的庫和依賴。命令格式如下:pipinstallpackage_name[==version]package_name為第三方包的名稱,version表示特定版本的包,可忽略。1.使用pip命令安裝第三方包如果使用pip安裝時(shí)速度較慢,可以選擇國內(nèi)的鏡像源進(jìn)行加速,比如清華大學(xué)開源軟件鏡像站、阿里云鏡像源等。比如使用清華大學(xué)開源軟件鏡像站下載requests包,方法如下:pipinstallrequests-i/simple2.從PyPI或第三方網(wǎng)站下載.whl或.tar.gz文件安裝第三方包如果無法直接通過pip安裝某個(gè)包,可以嘗試從PyPI或第三方網(wǎng)站下載對應(yīng)的.whl或.tar.gz文件,然后使用pip進(jìn)行安裝。下載好文件后,打開終端或命令提示符窗口,進(jìn)入文件所在的目錄,然后運(yùn)行以下命令:pipinstallpackage_name.whl或pipinstallpackage_name.tar.gz3.

PyCharm開發(fā)環(huán)境中安裝第三方包打開PyCharm,選擇菜單項(xiàng)File→Settings→Project:project_name→PythonInterpreter,點(diǎn)擊包列表左上角的“+”按鈕,然后在彈出的搜索框中輸入要安裝的包名,點(diǎn)擊InstallPackage即可。常用庫Part.05Python社區(qū)系統(tǒng)還提供了很多優(yōu)秀的第三方庫,這些庫為開發(fā)者提供了各種擴(kuò)展功能和工具,以便更高效地編寫代碼。以下是一些Python中常見的第三方庫:numpy:支持大量的維度數(shù)組與矩陣運(yùn)算,針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。pandas:提供數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具的庫,使得在Python中進(jìn)行數(shù)據(jù)操作更加簡單和直觀。matplotlib:用于創(chuàng)建二維圖表和繪圖的庫,可以生成折線圖、散點(diǎn)圖、柱狀圖等。seaborn:基于Matplotlib的可視化庫,專注于統(tǒng)計(jì)數(shù)據(jù)可視化。scikit-learn:用于機(jī)器學(xué)習(xí)的Python庫,提供了機(jī)器學(xué)習(xí)算法和工具,如分類、回歸、聚類等。tensorflow:由Google開發(fā)的開源機(jī)器學(xué)習(xí)框架,用于各種機(jī)器學(xué)習(xí)應(yīng)用。常用庫Python社區(qū)系統(tǒng)還提供了很多優(yōu)秀的第三方庫,這些庫為開發(fā)者提供了各種擴(kuò)展功能和工具,以便更高效地編寫代碼。以下是一些Python中常見的第三方庫:tensorflow:由Google開發(fā)的開源機(jī)器學(xué)習(xí)框架,用于各種機(jī)器學(xué)習(xí)應(yīng)用。pytorch:Facebook開發(fā)的開源深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的庫。sciPy:用于數(shù)學(xué)、科學(xué)和工程的庫,包括統(tǒng)計(jì)、優(yōu)化、積分、插值等功能。requests:用于發(fā)送HTTP請求的庫。jieba:開源的中文分詞工具庫。beautifulsoup:用于解析HTML和XML文檔的庫,它提供了一些簡單和Pythonic的方法來提取和操作HTML和XML數(shù)據(jù)。常用庫requests庫是一個(gè)非常流行的第三方HTTP客戶端庫,用于發(fā)送HTTP請求。使用requests庫可以更方便地訪問網(wǎng)絡(luò)資源,并處理響應(yīng)數(shù)據(jù)。requests庫支持HTTP連接保持和連接池,支持使用cookie保持會(huì)話,支持文件上傳,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼,支持國際化的URL和POST數(shù)據(jù)自動(dòng)編碼requests庫requests庫的主要方法如下:get(url):用于向指定url發(fā)送get請求。post(url,data):用于向指定url發(fā)送帶數(shù)據(jù)的post請求。put(url,data):用于向指定url發(fā)送帶數(shù)據(jù)的put請求。patch(url,data):用于向指定url發(fā)送帶數(shù)據(jù)的patch請求。delete(url):用于向指定url發(fā)送delete請求。head(url):用于向指定url發(fā)送head請求。options(url):用于向指定url發(fā)送options請求。request(method,url,**kwargs):用于使用指定的HTTP方法向指定url發(fā)送請求,并使用其他可選參數(shù)。requests庫例:調(diào)用get()方法,示例代碼importrequests#需要先下載安裝requestsresponse=requests.get('')#發(fā)送GET請求ifresponse.status_code==200:#檢查請求是否成功

content=response.text#讀取響應(yīng)內(nèi)容

print(content)else:print(f"請求失敗,狀態(tài)碼:{response.status_code}")headers=response.headers#獲取響應(yīng)頭print(headers)encoding=response.encoding#獲取編碼方式print(encoding)requests庫jieba(結(jié)巴)庫是一個(gè)開源的中文分詞工具,用于將中文文本切分成詞語或詞匯單位。它廣泛用于自然語言處理(NLP)和文本分析領(lǐng)域。jieba分詞庫具備多種特點(diǎn)和功能,包括中文分詞、多種分詞模式、自定義詞典、高效快速以及關(guān)鍵詞提取等。jieba庫jieba庫分詞的原理:jieba庫利用一個(gè)中文詞庫,確定漢字之間的關(guān)聯(lián)概率,通過計(jì)算漢字之間的概率,漢字間概率大的組成詞組,形成分詞結(jié)果。jieba庫使用了兩種算法:最大正向匹配算法和基于隱馬爾可夫模型(HiddenMarkovModel,HMM)的Viterbi算法。jieba庫jieba庫分詞的原理:jieba分詞采用最大正向匹配算法來確定每個(gè)詞的邊界位置。這種算法從左到右掃描待分詞文本,根據(jù)最長的匹配原則來確定當(dāng)前詞的邊界。具體而言,算法從文本開頭開始,根據(jù)詞典中的詞語長度依次匹配文本,選擇最長的匹配詞語作為分詞結(jié)果,然后繼續(xù)在未匹配部分進(jìn)行匹配,直到整個(gè)文本被分詞完畢。在這個(gè)過程中,jieba分詞還會(huì)根據(jù)詞頻信息來處理歧義,對于多個(gè)可能的詞語組合,jieba分詞會(huì)選擇出現(xiàn)頻率更高的組合作為最終的分詞結(jié)果。jieba庫jieba庫分詞的原理:隱馬爾可夫模型(HMM)在jieba中主要用于詞性標(biāo)注和發(fā)現(xiàn)新詞。HMM是一種統(tǒng)計(jì)模型,在jieba中,HMM被用來預(yù)測已分詞序列的詞性,即給每個(gè)詞分配一個(gè)最可能的詞性標(biāo)簽。此外,HMM還能用于識別并提取文本中的新詞,這些新詞可能不在初始詞典中,但根據(jù)上下文和統(tǒng)計(jì)信息,可以被識別為有意義的詞匯單元。jieba還支持用戶自定義字典和停用詞,這使得用戶可以根據(jù)自己的特定需求定制分詞過程。jieba庫jieba庫的分詞模式:精確模式(默認(rèn)模式):該模式會(huì)將文本完全分詞,即將文本分成最多的詞語。它把文本精確的切分開,不存在冗余單詞。全模式:把文本中所有可能的詞語都掃描出來,有冗余單詞出現(xiàn)。表示對同一個(gè)文本從不同的角度來切分,變成不同的詞語。搜索引擎模式:該模式結(jié)合了精確模式和全模式的優(yōu)點(diǎn),適用于搜索引擎的分詞,它在精確模式基礎(chǔ)上,對長詞語再次切分。jieba庫例:精確模式分詞importjiebas="中國是一個(gè)文明古國"print(jieba.lcut(s))#調(diào)用lcut()函數(shù),返回列表數(shù)據(jù)分詞輸出結(jié)果為:['中國','是','一個(gè)','文明古國']jieba庫例:全模式分詞importjiebas="中國是一個(gè)文明古國"print(jieba.lcut(s,cut_all=True))分詞輸出結(jié)果為:['中國','國是','一個(gè)','文明','古國']jieba庫例:搜索引擎模式分詞importjiebas="中華人民共和國是文明古國"print(jieba.lcut_for_search(s))分詞輸出結(jié)果為:['中華','華人','人民','共和','共和國','中華人民共和國','是','文明','古國','文明古國']jieba庫任務(wù)實(shí)現(xiàn)Part.03分析代碼01編寫代碼02任務(wù)實(shí)現(xiàn)1.代碼分析任務(wù)實(shí)現(xiàn)首先下載安裝第三方包requests、jieba、lxml、bs4,導(dǎo)入相應(yīng)的模塊。使用requests的get()方法獲取目標(biāo)頁面的HTML文檔。使用BeautifulSoup解析HTML文檔;提取id為"UCAP-CONTENT"的div元素中的所有span元素,span元素的text屬性即為文本內(nèi)容,將所有的文本內(nèi)容逐行存入gov.txt文件中。將gov.txt中的文本內(nèi)容讀取到內(nèi)存,使用精確模式對文本進(jìn)行分詞;遍歷所有的分詞,統(tǒng)計(jì)每個(gè)分詞出現(xiàn)的次數(shù)。定義構(gòu)建排除詞庫,排除掉部分分詞。對分詞按照出現(xiàn)的次數(shù)進(jìn)行降序排列,最后輸出前10個(gè)分詞。(1)啟動(dòng)PyCharm,新建Python項(xiàng)目,位置為D:\Chapter11,新建Python文件webcrawler.Py

(2)在webcrawler.py文件的代碼編輯窗口,輸入以下代碼:編寫代碼

importrequests#導(dǎo)入requests庫importjieba

#導(dǎo)入jieba庫frombs4importBeautifulSoup#導(dǎo)入bs4庫的BeautifulSoup類編寫代碼#獲取目標(biāo)網(wǎng)址的HTML文檔res=requests.get("/zhengce/content/2022-05/13/content_5690111.htm")res.encoding='utf-8'#使用BeautifulSoup解析HTML文檔soup=BeautifulSoup(res.text,'html.pa

溫馨提示

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

最新文檔

評論

0/150

提交評論