<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          盤(pán)點(diǎn)URLError和HTTPError異常處理方式

          共 3676字,需瀏覽 8分鐘

           ·

          2024-04-11 04:53

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

          回復(fù)“ 書(shū)籍 ”即可獲贈(zèng)Python從入門(mén)到進(jìn)階共10本電子書(shū)

          不堪玄鬢影,來(lái)對(duì)白頭吟。

          一、前言

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


          二、URLError

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

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

          2. 案例

          例:

          在代碼中,需要用 try-except 語(yǔ)句來(lái)包圍并捕獲相應(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 方法訪(fǎng)問(wèn)了一個(gè)不存在的網(wǎng)址。

          運(yùn)行結(jié)果:

          673979f5994345accb75a448df88c0b5.webp

          注:

          它說(shuō)明了錯(cuò)誤代號(hào)是11004,錯(cuò)誤原因是 getaddrinfo failed。


          三、HTTPError

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

          例:

          捕獲的異常是 HTTPError,它會(huì)帶有一個(gè) code 屬性,就是錯(cuò)誤代號(hào),另外又打印了 reason 屬性,這是它的父類(lèi) 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
                
              

          運(yùn)行結(jié)果:

          fe8e2936f4649900a1609814f0688ce2.webp

          1. 代碼解析

          錯(cuò)誤代號(hào)是 403,錯(cuò)誤原因是 Forbidden,說(shuō)明服務(wù)器禁止訪(fǎng)問(wèn)。

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

          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,不會(huì)再處理 URLError 異常。如果發(fā)生的不是HTTPError,則會(huì)去捕獲 URLError 異常,輸出錯(cuò)誤原因。

          另外還可以加入 hasattr 屬性提前對(duì)屬性進(jìn)行判斷,代碼改寫(xiě)如下

                
                  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. 首先對(duì)異常的屬性進(jìn)行判斷,以免出現(xiàn)屬性輸出報(bào)錯(cuò)的現(xiàn)象

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

          注 :

          HTTPError 實(shí)例產(chǎn)生后會(huì)有一個(gè) code 屬性,這就是是服務(wù)器發(fā)送的相關(guān)錯(cuò)誤號(hào)。

          因?yàn)?urllib2 可以為處理重定向,也就是 3 開(kāi)頭的代號(hào)可以被處理,并且 100-299 范圍的號(hào)碼指示成功,所以只能看到 400-599 的錯(cuò)誤號(hào)碼。


          四、總結(jié)

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

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

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

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

          往期精彩文章推薦:

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

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【 入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【 在看 】行不行

          /今日留言主題/

          隨便說(shuō)一兩句吧~

          瀏覽 11
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天色,天天干,天天 | 97人妻人人揉人人躁人人 | 欧美成年人在线视频 | 熟女少妇乱| 麻豆成人无码 |