python 超時異常處理


異常處理具體見:【循序漸進學Python】9.異常處理

環境平台:Python2.7.9 + Win8.1

本篇記錄一下自己寫爬蟲的遇到的問題,程序中批量獲取圖片地址,然后批量保存。由於沒有設置網址打開超時,導致程序一直卡在哪里,程序處於假死狀態。

經查詢得知沒有對程序進行超時處理,由於使用的是urllib模塊的urlopen,無法直接添加timeout參數(注:python2.6之前的urllib2模塊也無法添加timeout參數)

 

1 import socket
2 import urllib2
3 
4 socket.setdefaulttimeout(seconds)
5 open = urllib.urlopen("http://*****.com")
6 
7 #通過socket.setdefaulttimeout() 設置了全局默認超時時間,從而給urllibe.urlopen()也設置了默認的超時時間

 

Python urllib2設置超時並處理超時異常

最簡單的情況是捕獲urllib2.URLError

 

1 try:  
2     urllib2.urlopen("http://example.com", timeout = 1)  
3 except urllib2.URLError, e:  
4     raise MyException("There was an error: %r" % e)  

 

以下代碼對超時異常進行了捕獲

 1 import urllib2  
 2 import socket  
 3       
 4 class MyException(Exception):  
 5         pass  
 6       
 7 try:  
 8     urllib2.urlopen("http://example.com", timeout = 1)  
 9 except urllib2.URLError, e:  
10     if isinstance(e.reason, socket.timeout):  
11         raise MyException("There was an error: %r" % e)  
12     else:  
13         # reraise the original error  
14         raise

下面是自己爬蟲程序內的一部分,僅僅做了簡單的捕獲處理。

 1 def saveImg(self, imageURL, fileName):
 2         try:
 3             u = urllib2.urlopen(imageURL, timeout=10)
 4             data = u.read()
 5             f = open(fileName, 'wb')
 6             f.write(data)
 7             print u"正在保存美女圖片", fileName
 8             f.close()
 9         except Exception, e:
10             print e

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM