Python運(yùn)行出現(xiàn)異常如何處理-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

創(chuàng)新互聯(lián)建站作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),有關(guān)成都企業(yè)網(wǎng)站建設(shè)方案、改版、費(fèi)用等問(wèn)題,行業(yè)涉及成都電動(dòng)窗簾等多個(gè)領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹 Python運(yùn)行出現(xiàn)異常如何處理,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

首先,程序在運(yùn)行的過(guò)程中,產(chǎn)生了異常,這時(shí),我們可能會(huì)有兩種想法,第一種是針對(duì)這個(gè)異常做某些特殊的處理來(lái)進(jìn)行程序的降級(jí)處理;第二種是希望程序忽略這個(gè)異常繼續(xù)執(zhí)行下去,這個(gè)異??赡懿⒉桓蓴_主邏輯的執(zhí)行。

那這個(gè)時(shí)候我們?cè)趺崔k呢?

有編程經(jīng)驗(yàn)的同學(xué)馬上就想到了,那我們?nèi)?try 它啊,在 Python 中,我們同樣可以去 try 它,從字面意思上理解就已經(jīng)非常清晰明確了,以下的內(nèi)容是要嘗試執(zhí)行的。

語(yǔ)法:

try:
    ...(可能產(chǎn)生異常的代碼)
except:
    ...(產(chǎn)生異常后的處理代碼)

但是,還會(huì)有一種情況,不管上面的代碼有沒(méi)有出錯(cuò),有一部分代碼我們總希望它能執(zhí)行,這時(shí),我們可以添加另一個(gè)關(guān)鍵字 finally 。

從字面意思可以就可以看出來(lái),這個(gè)是最后要執(zhí)行的意思。

語(yǔ)法:

try:
    ...(可能產(chǎn)生異常的代碼)
except:
    ...(產(chǎn)生異常后的處理代碼)
finally:
    ...(一定要執(zhí)行的代碼)

下面開(kāi)始我們今天的代碼演示。

我們先擬定一個(gè)場(chǎng)景,我們定義一個(gè)除法函數(shù),如果除數(shù)不為 0 ,是可以正常返回值的,如果除數(shù)為 0 ,那么整個(gè)程序肯定會(huì)直接異常報(bào)錯(cuò)。

def division(x, y):
    try:
        return x / y
    except:
        print('程序報(bào)錯(cuò)啦?。?!')
        return None

print(division(15, 5))

輸出結(jié)果如下:

3.0

這時(shí)程序是可以正常輸出的,這時(shí)我們修改一下調(diào)用的參數(shù),改為 division(15, 0) ,看下輸出結(jié)果:

程序報(bào)錯(cuò)啦!??!
None

可以看到,這里打印了我在程序中設(shè)置的 None ,并沒(méi)有之前的紅色的異常信息拋出。這里的 except 會(huì)捕捉我們所有的異常信息,但是,異常信息也是有很多分類的,比如我們之前遇到過(guò)的訪問(wèn)字典中不存在的 key 的異常 KeyError ,比如我們剛才捕捉到的 ZeroDivisionError 異常,還有也是我們之前遇到過(guò)的數(shù)組下標(biāo)越界的異常 IndexError  。

比如這里的代碼我可以捕捉更加詳細(xì)的異常信息 ZeroDivisionError 。

def division1(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        print('程序報(bào)錯(cuò)啦?。?!')
        return None

print(division1(15, 0))

輸出結(jié)果如下:

程序報(bào)錯(cuò)啦!??!
None

那么,看到這里,你可能會(huì)有一個(gè)疑問(wèn),我們?yōu)槭裁匆獙?duì)異常分類,直接抓取所有異常不是更方便么?

當(dāng)然,對(duì)于邏輯比較簡(jiǎn)單的程序,直接捕捉所有異常是更方便的,但是在某些特定的業(yè)務(wù)場(chǎng)景下,一段程序可能會(huì)拋出多種異常,我們希望根據(jù)異常種類的不同,定制不同的解決方案,至少我們知道當(dāng)前的程序是拋出了什么異常,這時(shí),程序異常分類就顯得尤為重要。

我們這里演示一下,如果我們輸出的值不是數(shù)字,是字符串的話。。。。

def division2(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        print('您輸出的除數(shù)為 0 ?。?!')
        return None
    except TypeError:
        print('您輸出的參數(shù)類型非法?。?!')
        return None

print(division2('python', 0))

輸出結(jié)果如下:

您輸出的參數(shù)類型非法!?。?None

對(duì)的,你沒(méi)有看錯(cuò),異常信息是能捕捉多個(gè)的,是可以并排寫的。至于先拋出那個(gè),就要看那個(gè)異常先發(fā)生了。

因?yàn)槭纠a的邏輯過(guò)于簡(jiǎn)單,異常拋出順序無(wú)法演示,請(qǐng)各位同學(xué)見(jiàn)諒(li zhi qi zhuang)。

上面我們還提到了 finally ,我們接著來(lái)演示 finally 這個(gè)關(guān)鍵字的使用。

def division3(x, y):
    try:
        return x / y
    except ZeroDivisionError:
        print('您輸出的除數(shù)為 0 ?。?!')
        return None
    except TypeError:
        print('您輸出的參數(shù)類型非法!?。?#39;)
        return None
    finally:
        print('你一定能看到我?。?!')

print(division3(15, 3))
print(division3('python', 0))

可以看到,這里我使用有異常和正常無(wú)任何問(wèn)題的數(shù)據(jù)進(jìn)行測(cè)試,結(jié)果如下:

你一定能看到我?。?!
5.0
您輸出的參數(shù)類型非法?。?!
你一定能看到我?。?!
None

確實(shí), finally 中的內(nèi)容是能正常打印的,這里多提一句,這里經(jīng)常的使用方式是來(lái)關(guān)閉一些 I/O 讀寫操作或者一些外部連接,如數(shù)據(jù)庫(kù)、緩存服務(wù)等。

關(guān)于 Python運(yùn)行出現(xiàn)異常如何處理就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

本文名稱:Python運(yùn)行出現(xiàn)異常如何處理-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://muchs.cn/article4/eeeie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、軟件開(kāi)發(fā)、App開(kāi)發(fā)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作