自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

[[390611]]

一、前言

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

二、URLError

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

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

2. 案例
例:

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

  1. # coding:UTF8 
  2.  
  3. import urllib.request 
  4.  
  5. request = urllib.request.urlopen("http://www.baidu.com"
  6.  
  7. try: 
  8.     urllib.request.urlopen(request) 
  9.     print("[Errno 11004] getaddrinfo failed"
  10. except urllib.URLError as e: 
  11.     print(e.reason) 

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

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

注:

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

三、HTTPError

HTTPError 是 URLError 的子類,在利用 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 屬性,這是它的父類 URLError 的屬性。

  1. import urllib2 
  2. req = urllib2.Request('http://blog.csdn.net/cqcre'
  3. try: 
  4.     urllib2.urlopen(req) 
  5. except urllib2.HTTPError, e: 
  6.     print e.code 
  7.     print e.reason 

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

1. 代碼解析

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

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

2. 優(yōu)化代碼

  1. import urllib2 
  2. req = urllib2.Request('http://blog.csdn.net/cqcre'
  3. try: 
  4.     urllib2.urlopen(req) 
  5. except urllib2.HTTPError, e: 
  6.     print e.code 
  7. except urllib2.URLError, e: 
  8.     print e.reason 
  9. else
  10.     print "OK"   

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

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

  1. import urllib2 
  2. req = urllib2.Request('http://blog.csdn.net/cqcre'
  3. try: 
  4.     urllib2.urlopen(req) 
  5. except urllib2.URLError, e: 
  6.     if hasattr(e,"code"): 
  7.         print e.code 
  8.     if hasattr(e,"reason"): 
  9.         print e.reason 
  10. else
  11.     print "OK"   

3. 異常處理方法

首先對(duì)異常的屬性進(jìn)行判斷,以免出現(xiàn)屬性輸出報(bào)錯(cuò)的現(xiàn)象。

假如 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í)有幫助。

 

責(zé)任編輯:姜華 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2023-07-10 08:00:13

架構(gòu)Rest返回值

2017-04-17 10:05:51

Hadoop錯(cuò)誤方式

2018-08-14 13:26:07

異常設(shè)計(jì)斷網(wǎng)

2025-01-26 00:00:25

限流組件HTTP

2023-08-25 08:35:58

Rest方法字符串

2009-12-31 14:25:19

Silverlight

2010-01-18 16:58:29

VB.NET Over

2009-07-21 15:47:35

JDBC批處理

2023-10-08 20:31:18

React

2022-03-07 14:39:01

前端框架批處理

2010-01-07 17:57:22

VB.NET構(gòu)造函數(shù)

2024-04-07 08:50:00

GenAIAI人工智能

2010-01-13 17:23:36

VB.NET動(dòng)態(tài)事件

2025-01-27 12:19:51

2024-11-20 13:20:32

2010-10-15 12:17:28

Wi-Fi無(wú)線連接不上

2023-12-11 14:19:00

Java程序異常

2009-08-19 17:30:38

C#轉(zhuǎn)義字符

2009-06-12 08:57:56

Unix字符串處理

2012-08-13 10:23:33

IBMdW
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)