最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python常見異常的處理方式淺析

 更新時間:2023年02月21日 11:13:21   作者:愛吃餅干的小白鼠  
異常指當(dāng)程序出現(xiàn)錯誤后程序的處理方法,異常機制提供了程序正常退出的安全通道.當(dāng)出現(xiàn)錯誤后,程序執(zhí)行的流程發(fā)生改變,程序的控制權(quán)轉(zhuǎn)移到異常處理器,如序列的下標(biāo)越界、打開不存在的文件、空引用異常等

一、引言

有一定 Python 編程經(jīng)驗的人估計十有八九使用過異常,異常對于程序的健壯性是毋庸置疑的。

二、使用異常對數(shù)據(jù)進行初始化

在某些條件下,需要進行數(shù)據(jù)初始化,但數(shù)據(jù)不能提前確認,這個時候就可以結(jié)合異常的使用來判斷是否需要進行初始化。下面的代碼中的函數(shù) listDataStatics 用于統(tǒng)計列表中每個元素的出現(xiàn)個數(shù),處理時循環(huán)遍歷列表,對列表中已經(jīng)存在的元素計數(shù)器加 1,否則如果是鍵值不存在異常則進行數(shù)據(jù)初始化:

def listDataStatics(infList):
    dataInf = {}
    for l in infList:
        try:
            dataInf[l] += 1
        except KeyError as e:
            dataInf[l] =1
    return dataInf

當(dāng)然上述過程也可以用列表的 index 等方法來實現(xiàn),但個人認為這種方式最簡單。

三、使用異常實現(xiàn)重處理

某些異常需要進行重處理,如出現(xiàn)網(wǎng)絡(luò)連接斷開時需要在網(wǎng)絡(luò)正常后重新訪問網(wǎng)絡(luò),下面是一個案例。

import urllib,time
def getHtmlPage(url):
    while True:
        try:
            req = urllib.request.Request(url=url)
            text = urllib.request.urlopen(req).read().decode()
        except ConnectionError:
            print("ConnectionError:network has disconnected")
            time.sleep(3)
            continue
        except Exception as e:
            err = str(e)
            if err.find('getaddrinfo failed')>=0:
                print("getaddrinfo failed:network has disconnected")
                time.sleep(3)
                continue
            else: return ''
        else:return text

四、使用異常應(yīng)對多種潛在情況

在使用 Moviepy1.03 通過 VideoFileClip 執(zhí)行報 UnicodeDecodeError 錯,發(fā)現(xiàn)是少數(shù)視頻有問題,從報錯信息看是 Moviepy 的 ffmpeg_reader.py 模塊有個如下代碼:infos = error.decode(‘utf8’)解碼出現(xiàn)問題,將其改為:infos = error.decode(‘ANSI’)順利解決,但解決后用來加載其他視頻文件又報錯,后來將代碼改成如下方式:

try:
    infos = error.decode('utf8')
except Exception as e:
    infos = error.decode('ANSI')

五、獲取異常詳細信息

Python 自己拋出的異常會有詳細的異常信息,包括異常類型、錯誤內(nèi)容、程序代碼位置及相關(guān)函數(shù)調(diào)用棧信息,但異常捕獲后這些錯誤信息默認就消失了,為了實現(xiàn)提供與 Python 相同的異常信息,需要異常捕獲程序進行處理:

通過類似except Exception as e捕獲異常后,打印 e 的內(nèi)容(也可打印 e.errno、e.strerror)可以提供異常的類型及異常的錯誤信息說明;

采用 traceback 模塊的 print_exc 查看異常對應(yīng)程序代碼位置及相關(guān)函數(shù)調(diào)用棧信息發(fā)生異常時,Python 保留引發(fā)異常程序的當(dāng)前狀態(tài),并可通過 traceback 跟蹤異常發(fā)生時與函數(shù)調(diào)用堆棧有關(guān)的信息。程序調(diào)用每個函數(shù)時,Python 會在“函數(shù)調(diào)用堆棧”的起始處插入函數(shù)名。一旦異常被引發(fā),Python 會搜索異常處理程序,如果當(dāng)前函數(shù)中沒有異常處理程序,當(dāng)前函數(shù)會終止執(zhí)行,Python 會搜索當(dāng)前函數(shù)的調(diào)用函數(shù),并以此類推,直到發(fā)現(xiàn)匹配的異常處理程序,或者 Python 抵達主程序為止。這一查找合適的異常處理程序的過程就稱為“堆棧輾轉(zhuǎn)開解”(StackUnwinding)。

下面代碼在訪問網(wǎng)站遇到異常時,打印詳細的異常錯誤信息及代碼位置:

import urllib,traceback
def getHtmlPage(url):
        try:
            req = urllib.request.Request(url=url)
            text = urllib.request.urlopen(req).read().decode()
        except Exception as e:
                print(f"訪問網(wǎng)站獲取推薦文章失敗,當(dāng)前url={url},異常原因:\n{e}\n" + '\n' + traceback.format_exc() )
                return ''
        else:return text

六、人工觸發(fā)異常

除了程序自動引發(fā)的異常外,也可以通過 raise 函數(shù)主動拋出異常,一般用在程序主動檢查發(fā)現(xiàn)錯誤的情況,避免錯誤擴散。下面這段代碼檢查列表 infList 中的元素是否為列表,如果不是列表則拋出異常:

    for row in infList:
        if not isinstance(row,list):
            raise ValueError("checkAndRepairListData實參不滿足第一個參數(shù)為二維列表的要求!\n"+traceback.format_exc())

可以看到,使用 raise 拋出異常時,需要提供異常類型和異常信息,并在此時也可以獲取程序的代碼位置及函數(shù)堆棧信息。

七、異常嵌套

異常允許嵌套,包括在一個 try...except 語句的 try 和 except 之間嵌入另一個 try...except 語句,也可以在異常處理語句、else、finally 子句中再嵌套 try...except 語句,在此就不舉例介紹了。

小結(jié)

本文介紹了 Python 異常用于數(shù)據(jù)初始化、業(yè)務(wù)重處理、多情況處理的三種應(yīng)用方式,以及獲取異常詳細信息、人工觸發(fā)異常及異常嵌套等與異常相關(guān)的知識

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

相關(guān)文章

  • PyCharm連接遠程服務(wù)器的超級詳細教程

    PyCharm連接遠程服務(wù)器的超級詳細教程

    Pycharm可以與服務(wù)器建立連接,把相應(yīng)的項目同步到服務(wù)器上,下面這篇文章主要給大家介紹了關(guān)于PyCharm連接遠程服務(wù)器的超級詳細教程,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • pandas修改DataFrame列名的方法

    pandas修改DataFrame列名的方法

    下面小編就為大家分享一篇pandas修改DataFrame列名的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python利用物理引擎Pymunk編寫一個解壓小游戲

    Python利用物理引擎Pymunk編寫一個解壓小游戲

    這篇文章主要為大家詳細介紹了Python如何利用物理引擎Pymunk編寫一個解壓小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2023-01-01
  • Python os模塊介紹

    Python os模塊介紹

    這篇文章主要介紹了Python os模塊介紹,需要的朋友可以參考下
    2014-11-11
  • Python 安裝 virturalenv 虛擬環(huán)境的教程詳解

    Python 安裝 virturalenv 虛擬環(huán)境的教程詳解

    這篇文章主要介紹了Python 安裝 virturalenv 虛擬環(huán)境的教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • django中send_mail功能實現(xiàn)詳解

    django中send_mail功能實現(xiàn)詳解

    這篇文章主要給大家介紹了關(guān)于django中send_mail功能實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • python基礎(chǔ)之集合

    python基礎(chǔ)之集合

    這篇文章主要介紹了python集合,實例分析了Python中返回一個返回值與多個返回值的方法,需要的朋友可以參考下
    2021-10-10
  • 深入淺析python with語句簡介

    深入淺析python with語句簡介

    with 語句適用于對資源進行訪問的場合,確保不管使用過程中是否發(fā)生異常都會執(zhí)行必要的“清理”操作,釋放資源,這篇文章給大家介紹了python with語句簡介,感興趣的朋友一起看看吧
    2018-04-04
  • OpenCv實現(xiàn)繪圖功能

    OpenCv實現(xiàn)繪圖功能

    這篇文章主要為大家詳細介紹了OpenCv實現(xiàn)繪圖功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • PyQt5之如何設(shè)置QWidget窗口背景圖片問題

    PyQt5之如何設(shè)置QWidget窗口背景圖片問題

    這篇文章主要介紹了PyQt5之如何設(shè)置QWidget窗口背景圖片問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

尼玛县| 鄯善县| 巴楚县| 溧阳市| 巴里| 襄垣县| 旌德县| 星座| 宁明县| 东兴市| 正阳县| 隆化县| 互助| 镇赉县| 石嘴山市| 东至县| 达州市| 满洲里市| 宁安市| 高淳县| 普定县| 马公市| 梁山县| 安庆市| 阿拉善左旗| 蓝田县| SHOW| 阿拉善右旗| 冕宁县| 防城港市| 梅州市| 宣汉县| 仁化县| 夹江县| 山东省| 十堰市| 攀枝花市| 商丘市| 盖州市| 内江市| 成安县|