真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python異常處理的知識(shí)點(diǎn)有哪些

本篇內(nèi)容主要講解“Python異常處理的知識(shí)點(diǎn)有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python異常處理的知識(shí)點(diǎn)有哪些”吧!

沁縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

異常捕獲

首先我們來(lái)看一個(gè)例子:

Python異常處理的知識(shí)點(diǎn)有哪些

我通過(guò) print(a) 讓Python解釋器給我報(bào)了一個(gè)異常,其中包含錯(cuò)誤信息的所有上下文信息,代碼路徑、錯(cuò)誤代碼內(nèi)容、錯(cuò)誤信息等等。

print(a)這個(gè)語(yǔ)句錯(cuò)誤的原因是在于a這個(gè)變量沒(méi)有定義 (NameError: name 'a' is not  defined),這在我寫代碼之前就清楚。

然而在實(shí)際編程過(guò)程中,隨著代碼量的增加,我們有的時(shí)候并不確定某個(gè)變量是否已經(jīng)被賦值成功,如果變量未被成功的賦值,程序還是按原計(jì)劃對(duì)其進(jìn)行操作時(shí)可能就會(huì)直接報(bào)錯(cuò)。

要解決這個(gè)問(wèn)題有兩個(gè)辦法:

  • 對(duì)變量進(jìn)行操作(例如加減法)之前檢查它的值是否已經(jīng)存在,如果不存在,就告訴用戶

  • 捕獲該異常,并且告訴用戶

這兩種辦法的結(jié)果其實(shí)都是會(huì)告訴用戶錯(cuò)誤信息,在結(jié)果上并沒(méi)有太大的變化,今天我們主要講第二種,異常自動(dòng)捕獲的方式。

現(xiàn)在我們改造一下剛才的代碼,把異常捕獲到然后自定義處理方式:

Python異常處理的知識(shí)點(diǎn)有哪些

以上的代碼例子展示我們通過(guò)異常捕獲 try except的語(yǔ)法把錯(cuò)誤捕獲到,并且自定義了其輸出內(nèi)容。

讓我們來(lái)解釋一下這段代碼:

  • try用于定義一個(gè)異常捕獲的語(yǔ)法塊。

  • 在try縮進(jìn)的區(qū)塊里,我們可以正常寫我們想要實(shí)現(xiàn)的代碼。

  • 在except區(qū)塊里,我們定義了如果程序報(bào)錯(cuò)后所要執(zhí)行的代碼,在本例子中就是直接打印報(bào)錯(cuò)信息 (報(bào)錯(cuò)信息:name 'a' is not  defined)。

  • except后面的Exception as e 的用處是用于定義錯(cuò)誤信息類型(Exception),并且將錯(cuò)誤信息賦值給變量e。

通過(guò)在代碼任意位置使用try...except語(yǔ)法,我們可以設(shè)置多個(gè)try...except的代碼塊,如果在try中程序正常執(zhí)行沒(méi)有報(bào)錯(cuò),那么程序就會(huì)跳過(guò)except區(qū)塊,正常執(zhí)行之后的代碼。

異常類型

我們剛才用到Exception這個(gè)異常類型,它在Python中是常規(guī)錯(cuò)誤的基類,如果我們對(duì)可能出錯(cuò)的類型不能確定時(shí)就可以使用到它,但是一般不建議這么做。

不直接使用Exception的理由是我們?cè)诓东@到異常時(shí),總是希望能夠?qū)Ξ惓_M(jìn)行明確的報(bào)錯(cuò)或者處理,如果所有錯(cuò)誤都是Exception類型,我們其實(shí)也不知道程序究竟是在哪里出了錯(cuò)。

舉個(gè)例子來(lái)說(shuō)明這個(gè)問(wèn)題。

Python異常處理的知識(shí)點(diǎn)有哪些

通過(guò)上面這個(gè)例子我們可以學(xué)到兩件事情:

  • except和try是一對(duì)多的,有一個(gè)try語(yǔ)句,可以有1個(gè)或多個(gè) except語(yǔ)句,其用處是定義任意個(gè)異常類型和相關(guān)的處理代碼

  • 當(dāng)異常捕獲發(fā)生后,程序會(huì)中斷執(zhí)行,停留在第一個(gè)異常報(bào)錯(cuò)的位置。在本例子中因?yàn)槲覀僫mport xxx實(shí)際上是引入了一個(gè)不存在的模塊名,所以程序報(bào)錯(cuò) No  module named 'xxx',其錯(cuò)誤類型是ImportError

現(xiàn)在我們嘗試把import xxx去掉試試。

Python異常處理的知識(shí)點(diǎn)有哪些

現(xiàn)在程序報(bào)了類型錯(cuò)誤(TypeError),因?yàn)閕nt類型的數(shù)據(jù)無(wú)法和str類型的數(shù)字進(jìn)行加法操作。

下面我給一個(gè)Python的常見(jiàn)異常錯(cuò)誤類型表,供大家參考。

Python異常處理的知識(shí)點(diǎn)有哪些

主動(dòng)拋出異常

上面我們講到了Python如何被動(dòng)捕獲異常,現(xiàn)在我們來(lái)講講主動(dòng)拋出異常的方法。

為什么要主動(dòng)拋出異常?

通常我們通過(guò)try  except捕獲的異常叫做被動(dòng)捕獲,它其實(shí)是需要程序員進(jìn)行處理的,比如對(duì)錯(cuò)誤的變量?jī)?nèi)容做一些改正讓其繼續(xù)執(zhí)行。但是主動(dòng)拋出異常通常不需要再進(jìn)行處理,程序員已經(jīng)確定這個(gè)地方必須拋出異常給用戶,并且中斷程序執(zhí)行,基于這種情況下程序員就不用再對(duì)異常進(jìn)行處理了。

來(lái)看一個(gè)例子:

Python異常處理的知識(shí)點(diǎn)有哪些

在這段代碼里,我們定義了a為一個(gè)整型的數(shù)字。

然后通過(guò)instance()內(nèi)部函數(shù)判斷a如果不是字符串類型的情況下,就通過(guò)raise語(yǔ)句主動(dòng)拋出一個(gè)異常,報(bào)錯(cuò)內(nèi)容也是我們自定義的,其作用就是直接告訴用戶,數(shù)據(jù)出錯(cuò)了。

有朋友會(huì)提一個(gè)問(wèn)題,你自己定義的a = 1,它明明是整型數(shù)字,你還拿去判斷它是不是字符串,這不是多此一舉嗎?它是不是字符串你心里沒(méi)點(diǎn)數(shù)嗎?

沒(méi)錯(cuò),之所以你會(huì)有這個(gè)問(wèn)題是因?yàn)槲覀兊睦犹?jiǎn)單,假設(shè)變量a的內(nèi)容是來(lái)自于另一個(gè)模塊呢?或者是來(lái)自于爬蟲從網(wǎng)絡(luò)上抓取下來(lái)的數(shù)據(jù)?這個(gè)時(shí)候我們根本不知道a可能是什么內(nèi)容,那么就必須用到異常處理機(jī)制了。

raise的語(yǔ)法很簡(jiǎn)單:

raise [exceptionName [(reason)]]

在它后面跟上想要拋出的異常類型即可,如果有必要寫上錯(cuò)誤內(nèi)容的話,就傳進(jìn)去:

raise ValueError("a必須是字符串")

另外raise語(yǔ)句其實(shí)也可以和 try except結(jié)合起來(lái)使用:

Python異常處理的知識(shí)點(diǎn)有哪些

上面這個(gè)例子展現(xiàn)了程序如何主動(dòng)拋出異常,再由except捕獲并打印錯(cuò)誤信息。

自定義異常

其實(shí)我們剛才了解到所有異常錯(cuò)誤類型其實(shí)都是一個(gè)類 (class ),那么我們同樣可以自定義一個(gè)異常類,以便于在程序里使用。

Python異常處理的知識(shí)點(diǎn)有哪些

通過(guò)以上的代碼例子:

  • 我們自定義了一個(gè)異常類,叫做CustomerError,繼承自BaseException這個(gè)Python異常錯(cuò)誤類型的基類

  • 然后定義其__init__方法,并用一個(gè)變量接受傳入的錯(cuò)誤信息。

  • __init__方法里可以什么都不做,用一個(gè)pass占位即可,因?yàn)镃ustomerError類是繼承自BaseException的,它天生具有BaseException的所有特性。

  • 最后我們拋出一個(gè)CustomerError異常,并傳了一個(gè)字符串內(nèi)容"自定義異常"進(jìn)去,由except 捕獲到這個(gè)異常并輸出異常內(nèi)容。

到此,相信大家對(duì)“Python異常處理的知識(shí)點(diǎn)有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


新聞名稱:Python異常處理的知識(shí)點(diǎn)有哪些
文章分享:http://weahome.cn/article/gcssoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部