您的位置:首页 > 编程语言 > Python开发

python 超时异常处理

2015-07-23 21:38 706 查看
异常处理具体见:【循序渐进学Python】9.异常处理

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

本篇记录一下自己写爬虫的遇到的问题,程序中批量获取图片地址,然后批量保存。由于没有设置网址打开超时,导致程序一直卡在哪里,程序处于假死状态。

经查询得知没有对程序进行超时处理,由于使用的是urllib模块的urlopen,无法直接添加timeout参数(注:python2.6之前的urllib2模块也无法添加timeout参数)

import socket
import urllib2

socket.setdefaulttimeout(seconds)
open = urllib.urlopen("http://*****.com")

#通过socket.setdefaulttimeout() 设置了全局默认超时时间,从而给urllibe.urlopen()也设置了默认的超时时间


Python urllib2设置超时并处理超时异常

最简单的情况是捕获urllib2.URLError

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


以下代码对超时异常进行了捕获

import urllib2
import socket

class MyException(Exception):
pass

try:
urllib2.urlopen("http://example.com", timeout = 1)
except urllib2.URLError, e:
if isinstance(e.reason, socket.timeout):
raise MyException("There was an error: %r" % e)
else:
# reraise the original error
raise


下面是自己爬虫程序内的一部分,仅仅做了简单的捕获处理。

def saveImg(self, imageURL, fileName):
try:
u = urllib2.urlopen(imageURL, timeout=10)
data = u.read()
f = open(fileName, 'wb')
f.write(data)
print u"正在保存美女图片", fileName
f.close()
except Exception, e:
print e
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: