python 超时异常处理,【循序渐进学Python】9.异常处理

异常处理具体见:【循序渐进学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

 

    原文作者:Chris*Chen
    原文地址: http://www.cnblogs.com/nju2014/p/4671872.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞