1. 盤點URLError和HTTPError異常處理方式

        共 3676字,需瀏覽 8分鐘

         ·

        2024-04-11 04:53

        點擊上方“ Python爬蟲與數(shù)據(jù)挖掘 ”,進行關(guān)注

        回復(fù)“ 書籍 ”即可獲贈Python從入門到進階共10本電子書

        不堪玄鬢影,來對白頭吟。

        一、前言

        本文主要說URLError 還有 HTTPError,以及一些處理方式。


        二、URLError

        1. 解釋下 URLError 可能產(chǎn)生的3個原因:

              
                
                  # 1. 網(wǎng)絡(luò)無連接,即本機無法上網(wǎng)。
                
              
              
                
                  
        # 2. 連接不到特定的服務(wù)器。
        # 3. 服務(wù)器不存在。

        2. 案例

        例:

        在代碼中,需要用 try-except 語句來包圍并捕獲相應(yīng)的異常。

              
                
                  # coding:UTF8
                
              
              
                
                  
        import urllib.request
        request = urllib.request.urlopen("http://www.baidu.com")
        try: urllib.request.urlopen(request) print("[Errno 11004] getaddrinfo failed") except urllib.URLError as e: print(e.reason)

        利用了 urlopen 方法訪問了一個不存在的網(wǎng)址。

        運行結(jié)果:

        673979f5994345accb75a448df88c0b5.webp

        注:

        它說明了錯誤代號是11004,錯誤原因是 getaddrinfo failed。


        三、HTTPError

        HTTPError 是 URLError 的子類,在利用 urlopen 方法發(fā)出一個請求時,服務(wù)器上都會對應(yīng)一個應(yīng)答對象 response,其中它包含一個數(shù)字”狀態(tài)碼”。

        例:

        捕獲的異常是 HTTPError,它會帶有一個 code 屬性,就是錯誤代號,另外又打印了 reason 屬性,這是它的父類 URLError 的屬性。

              
                import urllib2
              
              
                req = urllib2.Request('http://blog.csdn.net/cqcre')
              
              
                try:
              
              
                    urllib2.urlopen(req)
              
              
                except urllib2.HTTPError, e:
              
              
                    print e.code
              
              
                    print e.reason
              
            

        運行結(jié)果:

        fe8e2936f4649900a1609814f0688ce2.webp

        1. 代碼解析

        錯誤代號是 403,錯誤原因是 Forbidden,說明服務(wù)器禁止訪問。

        知道,HTTPError 的父類是 URLError,根據(jù)編程經(jīng)驗,父類的異常應(yīng)當(dāng)寫到子類異常的后面,如果子類捕獲不到,那么可以捕獲父類的異常,

        2. 優(yōu)化代碼

              
                import urllib2
              
              
                req = urllib2.Request('http://blog.csdn.net/cqcre')
              
              
                try:
              
              
                    urllib2.urlopen(req)
              
              
                except urllib2.HTTPError, e:
              
              
                    print e.code
              
              
                except urllib2.URLError, e:
              
              
                    print e.reason
              
              
                else:
              
              
                    print "OK"  
              
            

        031187774e89533882cb3dd7607e2a56.webp

        如果捕獲到了 HTTPError,則輸出 code,不會再處理 URLError 異常。如果發(fā)生的不是HTTPError,則會去捕獲 URLError 異常,輸出錯誤原因。

        另外還可以加入 hasattr 屬性提前對屬性進行判斷,代碼改寫如下

              
                import urllib2
              
              
                req = urllib2.Request('http://blog.csdn.net/cqcre')
              
              
                try:
              
              
                    urllib2.urlopen(req)
              
              
                except urllib2.URLError, e:
              
              
                    if hasattr(e,"code"):
              
              
                        print e.code
              
              
                    if hasattr(e,"reason"):
              
              
                        print e.reason
              
              
                else:
              
              
                    print "OK"  
              
            

        b9232ed8e4d7250d284b90ab8f8e6ee5.webp

        3. 異常處理方法

        1. 首先對異常的屬性進行判斷,以免出現(xiàn)屬性輸出報錯的現(xiàn)象 。

        2. 假如 response 是一個”重定向”,需定位到別的地址獲取文檔,urllib2 將對此進行處理。

        注 :

        HTTPError 實例產(chǎn)生后會有一個 code 屬性,這就是是服務(wù)器發(fā)送的相關(guān)錯誤號。

        因為 urllib2 可以為處理重定向,也就是 3 開頭的代號可以被處理,并且 100-299 范圍的號碼指示成功,所以只能看到 400-599 的錯誤號碼。


        四、總結(jié)

        本文基于基礎(chǔ),通過案例的分析,代碼的展示。解決在實際應(yīng)用中,對于URLError空異常的處理方式。介紹了兩種主要的異常錯誤。以及提供了相應(yīng)錯誤的解決方案處理方法。

        歡迎大家積極嘗試,有時候看到別人實現(xiàn)起來很簡單,但是到自己動手實現(xiàn)的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。

        使用語言,能夠讓讀者更清晰,更直觀的理解文章內(nèi)容。代碼很簡單,希望對學(xué)習(xí)有幫助。

        ------------------- End -------------------

        往期精彩文章推薦:

        歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

        想加入Python學(xué)習(xí)群請在后臺回復(fù)【 入群

        萬水千山總是情,點個【 在看 】行不行

        /今日留言主題/

        隨便說一兩句吧~

        瀏覽 11
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 午夜精品秘 一区二区三区 | 掀开裙子从后面猛地挺进公交车里 | 午夜骚逼 | 九么免费版网站nba高危风险 | 免费视频91蜜桃 |