在程序中,使用分支結(jié)構(gòu)來(lái)避免可能出現(xiàn)的錯(cuò)誤,是一種常見(jiàn)模式。
在二次方程求解器的例子中,首先檢查數(shù)據(jù),然后再調(diào)用sqrt函數(shù)。有時(shí),函數(shù)會(huì)自己檢查可能出現(xiàn)的錯(cuò)誤,并返回一個(gè)特殊值,表明操作不成功。例如,不同的開(kāi)平方操作,可能會(huì)返回一個(gè)負(fù)數(shù),例如-1來(lái)暗示錯(cuò)誤。由于平方根函數(shù)應(yīng)該總是返回非負(fù)根,此值,可作為一個(gè)信號(hào),通知發(fā)生了錯(cuò)誤。
以下程序,運(yùn)用分支來(lái)檢查操作的結(jié)果,其中sqrt2是一個(gè)虛構(gòu)的函數(shù)。

如果處理特殊情況的分支語(yǔ)句,塞滿(mǎn)整個(gè)代碼空間,處理正常工作的主程序,就顯得不那么清晰易讀了。程序語(yǔ)言設(shè)計(jì)者因此想出了異常處理機(jī)制來(lái)解決這類(lèi)設(shè)計(jì)問(wèn)題。
異常處理機(jī)制,使得程序語(yǔ)言可以編寫(xiě)代碼,來(lái)捕獲和處理在程序運(yùn)行時(shí)發(fā)生的錯(cuò)誤,而不是顯示檢查算法的每一步是否成功。
異常處理程序可以簡(jiǎn)單的理解為,請(qǐng)做這些步驟,如果發(fā)生任何問(wèn)題,按這樣處理。
一、異常處理語(yǔ)句
1、Python使用try…except…,可使程序不因運(yùn)行錯(cuò)誤而崩潰。

當(dāng)python遇到一個(gè)try語(yǔ)句,它會(huì)嘗試執(zhí)行一個(gè)try語(yǔ)句體內(nèi)的語(yǔ)句,如果執(zhí)行這些語(yǔ)句沒(méi)有錯(cuò)誤,控制轉(zhuǎn)移到try…except…后面的語(yǔ)句。如果語(yǔ)句體內(nèi)發(fā)生錯(cuò)誤,python會(huì)尋找一個(gè)符合該錯(cuò)誤的異常語(yǔ)句,然后執(zhí)行處理代碼。

上方是一個(gè)使用try…except…小程序,用來(lái)捕捉ValueError小異常。
2、python的異常處理語(yǔ)句還可以使用else和finally關(guān)鍵字。結(jié)構(gòu)如下:

else、finally都是可選的,非必須項(xiàng)。但是else必須出現(xiàn)在finally之前,finally必須在整個(gè)語(yǔ)句的最后位置。try體內(nèi)如果無(wú)異常產(chǎn)生,則執(zhí)行else語(yǔ)句,finally后面的子句表達(dá)的是,無(wú)論是否發(fā)生異常,這些代碼都必須執(zhí)行。
在python中,except語(yǔ)句主要是用于處理程序正常執(zhí)行過(guò)程中出現(xiàn)的一些異常情況。如語(yǔ)法錯(cuò)誤、數(shù)據(jù)處理錯(cuò)誤、從未定義的變量上取值等。
而try…finally…語(yǔ)句則主要用于在無(wú)論是否發(fā)生異常情況,都需要執(zhí)行一些清理工作的場(chǎng)合。比如,在通信過(guò)程中,無(wú)論通信是否發(fā)生錯(cuò)誤,都需要在通信完成,或者發(fā)生錯(cuò)誤時(shí)關(guān)閉網(wǎng)絡(luò)連接。又或者,你在讀一個(gè)文件,無(wú)論是否有異常發(fā)生,最后都要關(guān)閉文件,那就可以使用finally…try…來(lái)完成
3、一組利用try…except…else…finally語(yǔ)句的異常測(cè)試程序如下。

下面是帶錯(cuò)誤處理的運(yùn)行實(shí)例。

輸入為3,4時(shí),程序給出輸出,打印無(wú)異常,及最后子句已執(zhí)行。
輸入2,0時(shí),程序捕捉到除數(shù)為0的類(lèi)型錯(cuò)誤,打印提示信息,并打印最后一句已執(zhí)行這條語(yǔ)句。
求解二次方程程序

帶錯(cuò)誤處理的運(yùn)行實(shí)例,上述程序捕獲錯(cuò)誤,并打印一條信息,表明該方程沒(méi)有實(shí)根。
4、異常處理語(yǔ)句
①try…except可以捕捉任何類(lèi)型的錯(cuò)誤。
②對(duì)于二次方程,還會(huì)有其他可能的錯(cuò)誤,如:輸入非數(shù)值類(lèi)型(NameError),輸入無(wú)效的表達(dá)式(SyntaxError)等。
③此時(shí)可以用一個(gè)try語(yǔ)句配多個(gè)except來(lái)實(shí)現(xiàn)。
改進(jìn)后的求解二次方程
