• 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
  • 相关阅读:
    P3387 【模板】缩点 tarjan
    P2831 愤怒的小鸟 状压dp
    交流帖
    P3959 宝藏 模拟退火。。。
    B1060 [ZJOI2007]时态同步 dfs
    P1850 换教室 概率dp
    树链刨分(待修改)
    B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
    B3402 [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
    B5248 [2018多省省队联测]一双木棋 状压dp
  • 原文地址:https://www.cnblogs.com/nju2014/p/4671872.html
Copyright © 2020-2023  润新知