欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中異常的捕獲與處理詳解

 更新時(shí)間:2023年08月16日 10:46:28   作者:史上最強(qiáng)踩坑王  
這篇文章主要介紹了Python中異常的捕獲與處理詳解,調(diào)試Python程序時(shí),經(jīng)常會(huì)報(bào)出一些異常,異常的原因一方面可能是寫程序時(shí)由于疏忽或者考慮不全造成了錯(cuò)誤,這時(shí)就需要根據(jù)異常Traceback到出錯(cuò)點(diǎn),進(jìn)行分析改正,需要的朋友可以參考下

異常是什么

Python異常是指在程序運(yùn)行中所產(chǎn)生的錯(cuò)誤,即代碼在無法正常執(zhí)行的情況下就會(huì)產(chǎn)生異常。

這個(gè)錯(cuò)誤可以是Python內(nèi)置的錯(cuò)誤類型,也可以是開發(fā)者自定義的錯(cuò)誤類型。

一、異常捕獲的框架

針對(duì)異常捕獲有幾種組合使用,針對(duì)于不同的場(chǎng)景使用不同的方法,在介紹組合使用的方法之前,先說一下異常捕獲的框架

第一種框架:

try:
    # 此處放你覺得將會(huì)出現(xiàn)異常的代碼,放這里
except 異常類型 as 變量:
    print(變量)

第二種框架:

這里不寫異常類型和變量,也是可以的,因?yàn)?python 解釋器內(nèi)部有一個(gè)基類(object),就是異常的基類 Exception ,系統(tǒng)會(huì)自動(dòng)根據(jù)你出現(xiàn)的異常類型,去給你打印對(duì)應(yīng)的異常內(nèi)容

try:
    # 此處放你要可能要出現(xiàn)異常的代碼
except:   # except 后面也可以不寫異常類型和變量
    print()

異常類型有很多種,例如:

NameError、ZeroDivisionError、list index out of range

  • 變量沒有定義出現(xiàn)的異常
  • 除數(shù)不能為0的異常
  • 使用索引去取值的時(shí)候,超過了索引的范圍的異常

針對(duì)于第一種變量沒有定義的異常,這里我在 pycharm 中直接輸入了一個(gè)字母 a,很顯然,我沒有定義變量 a 然后就去運(yùn)行就報(bào)出了異常

二、try-except 組合

  • try-except
  • try-except-else
  • try-except-finally

第一種組合:try-except

# 當(dāng)變量沒有定義的異常
try:
    a                       # try 與 except 之間寫可能會(huì)出現(xiàn)異常的代碼
except NameError as s:      # NameError 為異常的類型
    print(s)

 如下圖輸出的為:異常類型所對(duì)應(yīng)的類型

 -當(dāng)除數(shù)不為0的時(shí)候,這里要理解,當(dāng)沒有異常的時(shí)候,只會(huì)執(zhí)行 try 里面你寫的正常的代碼,而不會(huì)去執(zhí)行 except 里面的代碼,所以不必去擔(dān)心,當(dāng)我程序運(yùn)行正常,也會(huì)執(zhí)行 except 里面的代碼,而對(duì)執(zhí)行的結(jié)果有影響

# 當(dāng)除數(shù)不能為0的異常
try:
    a = 0
    b = 9
    c = a / b                 # 當(dāng)沒有異常的時(shí)候,只會(huì)執(zhí)行 try 里面的代碼,而不會(huì)執(zhí)行 except 里面的代碼
    print(c)
except ZeroDivisionError as zero:
    print(zero)

上面運(yùn)行的結(jié)果如下圖,輸出了變量 c 的結(jié)果,程序沒有異常,所以就沒有執(zhí)行except

 -當(dāng)除數(shù)為0的情況,有異常的時(shí)候

 第二種組合:try-except-else

這種組合用的較少

# try-except-else 結(jié)構(gòu),當(dāng)沒有異常的時(shí)候,就會(huì)執(zhí)行 else 里面的代碼
try:
    a = [1,2,3,4,5]
    b = a[2]
except IndexError as index_a:
    print(index_a)
else:
    print(b)

輸出的結(jié)果為:3,因?yàn)闆]有異常,所以也就沒有執(zhí)行 except 里面的代碼,也就執(zhí)行了 else

這種其實(shí)就跟我們正常的 try-except 組合很像,只不過這里單獨(dú) 加了一個(gè) else 關(guān)鍵字而已

讓其輸出結(jié)果,沒有什么特別之處

第三種組合:try-except-finally 

使用的次數(shù)很多,這里多加了一個(gè)保留字 finally 就是不管是否有異常,都會(huì)執(zhí)行 finally 里面的代碼

使用場(chǎng)景就是我可能在日常寫代碼的時(shí)候,我知道某一個(gè)地方可能會(huì)出現(xiàn)異常,但是我不管里面是否真正的出現(xiàn)異常,我都繼續(xù)執(zhí)行其它的代碼

# try-except-finally 結(jié)構(gòu),不管代碼是否有異常,最后都會(huì)執(zhí)行 finally 里面的代碼
try:
    a = [1,2,3,4,5]
    b = a[2]
except IndexError as index_b:
    print(index_b)
finally:
    print("列表索引超出了范圍")

- 沒有異常的時(shí)候,輸出 finally 里面的代碼 

 - 有異常的時(shí)候

# 1.try-except-finally 結(jié)構(gòu),不管代碼是否有異常,最后都會(huì)執(zhí)行 finally 里面的代碼
# 2.except 后面也可以不寫異常類型,因?yàn)橄到y(tǒng)默認(rèn)認(rèn)為后面的錯(cuò)誤類型是 Exception,這是一個(gè)基類,包含了所有的出錯(cuò)類型
try:
    a = [1,2,3,4,5]
    b = a[10]
except:
    print("list index out of range")
finally:
    print("列表取值的索引值超出了范圍")

 - 有異常的時(shí)候,也執(zhí)行了 finally 里面的代碼,注意,這里使用的是第二種結(jié)果,也就是一開始所講的,except 后面沒有跟保留字

第四種組合:try-except-except 

當(dāng)要寫的代碼中可能要出現(xiàn)兩個(gè)異常的時(shí)候,這里就可以再添加一個(gè) except 保留字

但是,這里只會(huì)執(zhí)行第一個(gè) except 里面的內(nèi)容

如下,當(dāng)除數(shù)為0的異常,我自定了一個(gè)打印內(nèi)容:除數(shù)不能為0,卻沒有執(zhí)行

"""
如下代碼,有兩個(gè)不同類型的異常,1.變量未定義,2.除數(shù)不能為0,這兩處可能會(huì)出現(xiàn)異常
"""
try:
    a
    b = 0
    c = 9
    d = c / b                           # 注意:當(dāng)有多個(gè) except 的時(shí)候,這里只會(huì)執(zhí)行第一個(gè) except 里面的代碼,其余的不會(huì)執(zhí)行,但是這樣不會(huì)標(biāo)紅
except NameError as name:               # 第一種寫法,except 后面跟異常的類型
    print(name)
except:                                 # 第二種寫法,except 后面不跟異常類型,讓其使用默認(rèn)的 Exception 類,這是一個(gè)基類,包含了所有的出錯(cuò)類型
    print("除數(shù)不能為0")

執(zhí)行的結(jié)果如下圖

到此這篇關(guān)于Python中異常的捕獲與處理詳解的文章就介紹到這了,更多相關(guān)Python異常捕獲處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3.8官網(wǎng)文檔之類的基礎(chǔ)語法閱讀

    Python3.8官網(wǎng)文檔之類的基礎(chǔ)語法閱讀

    類提供了一種組合數(shù)據(jù)和功能的方法,今天通過本文給大家分享Python3.8官網(wǎng)文檔之類的基礎(chǔ)語法閱讀知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • Django搭建項(xiàng)目實(shí)戰(zhàn)與避坑細(xì)節(jié)詳解

    Django搭建項(xiàng)目實(shí)戰(zhàn)與避坑細(xì)節(jié)詳解

    這篇文章主要給大家介紹了關(guān)于Django搭建項(xiàng)目實(shí)戰(zhàn)與避坑細(xì)節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 解決pycharm編輯區(qū)顯示yaml文件層級(jí)結(jié)構(gòu)遇中文亂碼問題

    解決pycharm編輯區(qū)顯示yaml文件層級(jí)結(jié)構(gòu)遇中文亂碼問題

    這篇文章主要介紹了解決pycharm編輯區(qū)顯示yaml文件層級(jí)結(jié)構(gòu)遇中文亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python異常信息的不同展現(xiàn)方法總結(jié)

    Python異常信息的不同展現(xiàn)方法總結(jié)

    在日常開發(fā)的過程中,當(dāng)代碼報(bào)錯(cuò)時(shí),我們通常要不斷打印、閱讀traceback提示信息,來調(diào)試代碼,這篇文章介紹了如何實(shí)現(xiàn)一個(gè)Exception?Hooks,使得traceback模塊的提示信息更加精確;同時(shí)還介紹了一些第三方庫,這些庫也提供了Exception?Hooks的功能
    2022-11-11
  • 如何利用Pandas刪除某列指定值所在的行

    如何利用Pandas刪除某列指定值所在的行

    工作中通常會(huì)遇到大量的數(shù)據(jù)集需要處理,其中的一項(xiàng)就是將含有某些數(shù)據(jù)的行刪除掉,下面這篇文章主要給大家介紹了關(guān)于如何利用Pandas刪除某列指定值所在的行的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Python?opencv圖像膨脹與腐蝕處理實(shí)例探究

    Python?opencv圖像膨脹與腐蝕處理實(shí)例探究

    這篇文章主要介紹了Python?opencv圖像膨脹與腐蝕處理實(shí)例探究
    2024-01-01
  • Ubuntu16.04 安裝多個(gè)python版本的問題及解決方法

    Ubuntu16.04 安裝多個(gè)python版本的問題及解決方法

    Ubuntu16.04自帶python2.7與python3.5,Ubuntu 官方 apt 庫中還未收錄 python 3.8,因此添加 deadsnakes PPA 源安裝python3.8,否則會(huì)出現(xiàn)報(bào)錯(cuò),接下來通過本文給大家介紹Ubuntu16.04 安裝python的問題,一起看看吧
    2021-09-09
  • django orm模塊中的 is_delete用法

    django orm模塊中的 is_delete用法

    這篇文章主要介紹了django orm模塊中的 is_delete用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 如何安裝并在pycharm使用selenium的方法

    如何安裝并在pycharm使用selenium的方法

    這篇文章主要介紹了如何安裝并在pycharm使用selenium,本文給大家提到了selenium安裝并導(dǎo)入pycharm的教程,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python3中多線程編程的隊(duì)列運(yùn)作示例

    Python3中多線程編程的隊(duì)列運(yùn)作示例

    這篇文章主要介紹了Python3中多線程編程的隊(duì)列運(yùn)作示例,文中用一個(gè)簡(jiǎn)單的例子展示了Python下嘗試多線程時(shí)隊(duì)列的進(jìn)站出站是如何運(yùn)作的,需要的朋友可以參考下
    2015-04-04

最新評(píng)論