日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

92、Python之異常:異常的概念及異常處理機(jī)制

92、Python之異常:異常的概念及異常處理機(jī)制

文章圖片

92、Python之異常:異常的概念及異常處理機(jī)制

文章圖片

92、Python之異常:異常的概念及異常處理機(jī)制

文章圖片


引言在Python的編程實(shí)踐中 , 異常處理是一個(gè)非常重要的主題 。
異常指的是程序在運(yùn)行過(guò)程中可能出現(xiàn)的錯(cuò)誤或者意外情況 , 合理地處理這些異??梢蕴岣叱绦虻慕研院陀脩?hù)體驗(yàn) 。
本文將詳細(xì)介紹一下Python中的異常的概念和異常處理機(jī)制 。
本文的主要內(nèi)容有:
1、異常的概念
2、異常的分類(lèi)
3、異常的處理機(jī)制
異常的概念所謂異常 , 是指程序在執(zhí)行的過(guò)程中發(fā)生的錯(cuò)誤或者意外情況 , 它們會(huì)中斷程序的正常執(zhí)行流程 。
在Python中一切皆對(duì)象 , 異常自然也不例外 。 在Python中所有的異常都繼承自BaseException類(lèi) 。

【92、Python之異常:異常的概念及異常處理機(jī)制】此外 , Exception也是一個(gè)比較常見(jiàn)的異常對(duì)象 , 它是所有非致命異常的父類(lèi):

異常的分類(lèi)關(guān)于異常 , 其實(shí)有很多種不同的分類(lèi)方式 , 這里 , 我們簡(jiǎn)單介紹比較重要的兩種分類(lèi)方式 。
1、異常的來(lái)源
從異常的來(lái)源的角度 , 可以把異常分為內(nèi)置異常和用戶(hù)自定義異常 。
1)內(nèi)置異常(Built-in Exceptions):Python中自帶的異常類(lèi)型 , 用于處理程序中通用的常見(jiàn)的錯(cuò)誤 。
2)用戶(hù)自定義異常(User-defined Exceptions):開(kāi)發(fā)者根據(jù)具體的業(yè)務(wù)場(chǎng)景需要 , 自行定義的異常類(lèi)型 。
這是最常見(jiàn)的一種分類(lèi)方法 。
2、異常的嚴(yán)重程度
從異常的嚴(yán)重程度 , 可以把異常分為非致命性異常和致命性異常 。
1)非致命性異常(non-exit Exceptions):需要說(shuō)明的是 , non-exit異常 , 并不是一個(gè)標(biāo)準(zhǔn)的專(zhuān)業(yè)術(shù)語(yǔ) , 它通常指的是那些不會(huì)導(dǎo)致程序立即停止執(zhí)行(非致命)的異常 。 這類(lèi)異??梢员徊东@和處理 , 從而使得程序能夠繼續(xù)執(zhí)行下去 。 一般而言 , 這些異常包括各種運(yùn)行時(shí)異常(Runtime Exceptions) , 如IndexError、KeyError等 。
2)致命性異常(exit Exceptions):與non-exit的概念相對(duì) , 指的是那些會(huì)導(dǎo)致程序立即停止運(yùn)行的異常 。 通常 , 這些程序是致命性的(Fatal) , 它們通常無(wú)法通過(guò)常規(guī)的異常處理機(jī)制(try-except結(jié)構(gòu))來(lái)使程序恢復(fù)執(zhí)行 。 理解這類(lèi)異常有助于編寫(xiě)更加健壯的程序 , 并且在設(shè)計(jì)應(yīng)用時(shí)能夠更好地應(yīng)對(duì)各種突發(fā)狀況 。 這種異常通常需要在架構(gòu)設(shè)計(jì)方面 , 采用冗余策略 , 實(shí)現(xiàn)容錯(cuò)機(jī)制 。
異常的處理機(jī)制在Python中 , 針對(duì)non-exit異常 , 主要是通過(guò)try...except...else...finally語(yǔ)法結(jié)構(gòu)的各種組合 , 來(lái)實(shí)現(xiàn)這類(lèi)異常的處理 。
try語(yǔ)句塊:負(fù)責(zé)對(duì)可能產(chǎn)生異常的語(yǔ)句塊進(jìn)行包裹、測(cè)試
except語(yǔ)句塊:當(dāng)try語(yǔ)句塊中發(fā)生異常時(shí) , 會(huì)自動(dòng)跳轉(zhuǎn)到except語(yǔ)句塊 , 進(jìn)入相應(yīng)捕獲的異常類(lèi)型進(jìn)行對(duì)應(yīng)的異常處理操作 , 如果異常沒(méi)有被正確捕獲 , 則會(huì)擊穿 , 向更高層的語(yǔ)法結(jié)構(gòu)拋出當(dāng)前異常對(duì)象 , 直至最終終止程序的執(zhí)行 。
else語(yǔ)句塊:如果try語(yǔ)句塊中沒(méi)有發(fā)生異常 , 則會(huì)跳轉(zhuǎn)到else語(yǔ)句塊來(lái)執(zhí)行相應(yīng)的無(wú)異常時(shí)的處理邏輯 。
finally語(yǔ)句塊:無(wú)論是否發(fā)生異常 , 最終都會(huì)執(zhí)行該語(yǔ)句塊 , 通常執(zhí)行一些必須執(zhí)行的操作 , 比如資源的釋放和清理操作 。
通過(guò)代碼簡(jiǎn)單驗(yàn)證一下non-exit異常的處理機(jī)制:

當(dāng)前 , b = 0 , 會(huì)觸發(fā)ZeroDivisionError異常 , 程序執(zhí)行結(jié)果:

當(dāng)我們把b 賦值為 2(任意一個(gè)非0的數(shù)字) , 則程序執(zhí)行結(jié)果如下:

從這兩個(gè)執(zhí)行結(jié)果 , 可以驗(yàn)證我們上面所介紹的各個(gè)語(yǔ)句塊的執(zhí)行邏輯 。
需要說(shuō)明的是 , 在進(jìn)行異常捕獲時(shí) , 并不一定需要把4個(gè)語(yǔ)句塊寫(xiě)完整 , 而且 , 可以根據(jù)需要寫(xiě)多個(gè)except語(yǔ)句塊 。 具體使用可以根據(jù)需求場(chǎng)景來(lái)自行組合實(shí)現(xiàn) 。
此外 , 針對(duì)exit異常 , 雖然通常難以使用上面的常規(guī)異常處理機(jī)制 , 還是有一些策略來(lái)幫助進(jìn)行預(yù)防和減輕它們的影響的:
1、內(nèi)存管理:
1)優(yōu)化代碼 , 避免不必要的大量數(shù)據(jù)操作 。
2)使用前面我們介紹過(guò)的迭代器和生成器來(lái)減少內(nèi)存的占用 。
3)定期進(jìn)行內(nèi)存清理和回收 。
2、控制遞歸深度:
1)確保遞歸函數(shù)有終止條件 。
2)使用循環(huán)對(duì)尾遞歸或者過(guò)深的遞歸進(jìn)行改造 。
3、有效使用斷言:
1)在開(kāi)發(fā)和測(cè)試階段使用斷言來(lái)捕獲潛在的問(wèn)題 , 但是在生產(chǎn)環(huán)境中避免使用 。
2)使用單元測(cè)試和其他測(cè)試方法來(lái)確保代碼的正確性 。
4、捕獲和處理SystemExit:
在需要明確終止程序時(shí) , 使用sys.exit() , 但在大多數(shù)情況下避免捕獲SystemExit , 以便程序能夠正常退出 。
總結(jié)本文首先介紹了Python中異常的概念 , 然后介紹了Python中異常的兩種分類(lèi) , 最后介紹了在Python中通過(guò)try...except...else...finally進(jìn)行非致命異常的處理機(jī)制 , 以及應(yīng)對(duì)致命異常的一些策略 。
以上就是本文的全部?jī)?nèi)容了 , 希望對(duì)您有所幫助 。

    推薦閱讀