处理Python中urllib2/mechanize库进行socket通信超时的问题
2013-07-25 13:37
447 查看
最近实验室的网络状况不太稳定,信息采集程序经常阻塞在通信时的recv()处,Python的urllib2/mechanize库在做HTTP访问时,是用socket方式进行通信,那么我们可以设置一个timeout值,来检测是否超时,并作出相应的异常处理。
异常处理的几个片段代码如下:
下面这部分代码是stackoverflow.com的dbr所写,感谢他的帮助!
下面是关于使用mechanize库的open方法(函数)时,捕获超时异常的代码,感谢stackoverflow.com中RoadieRich的帮助
(If you're using Python 2.6 or better, and a correspondingly updated version of mechanize, mechanize.urlopen should accept a timeout=... optional argument which seems to be what you're looking for... 具体地址: http://stackoverflow.com/questions/3552928/how-do-i-set-a-timeout-value-for-pythons-mechanize)
片段代码如下:
异常处理的几个片段代码如下:
import socket import urllib2 try: resp = urllib2.urlopen(req, timeout=32) except urllib2.URLError, e: print "Bad URL or timeout" #处理异常 except socket.timeout, e: print "socket timeout" #处理异常
import urllib2 import socket #In Python 2.7.3 class MyException(Exception): pass try: urllib2.urlopen("http://example.com", timeout = 32) except urllib2.URLError as e: print type(e) #not catch except socket.timeout as e: print type(e) #catched raise MyException("There was an error: %r" % e)
下面这部分代码是stackoverflow.com的dbr所写,感谢他的帮助!
import urllib2 import socket class MyException(Exception): pass try: urllib2.urlopen("http://example.com", timeout = 1) except urllib2.URLError, e: # For Python 2.6 if isinstance(e.reason, socket.timeout): raise MyException("There was an error: %r" % e) else: # reraise the original error raise except socket.timeout, e: # For Python 2.7 raise MyException("There was an error: %r" %
下面是关于使用mechanize库的open方法(函数)时,捕获超时异常的代码,感谢stackoverflow.com中RoadieRich的帮助
(If you're using Python 2.6 or better, and a correspondingly updated version of mechanize, mechanize.urlopen should accept a timeout=... optional argument which seems to be what you're looking for... 具体地址: http://stackoverflow.com/questions/3552928/how-do-i-set-a-timeout-value-for-pythons-mechanize)
片段代码如下:
tried=0 connected = False while not Connected: try: r = b.open('http://www.google.com/foobar', timeout=32) connected = true # if line above fails, this is never executed except mechanize.HTTPError as e: print e.code tried += 1 if tried > 4: exit() sleep(30) except mechanize.URLError as e: print e.reason.args tried += 1 if tried > 4: exit() sleep(30)
相关文章推荐
- C++多线程编程以及epoll处理socket通信时多端口问题
- Android与PC客户端进行Socket通信的一些问题
- java与c/c++进行socket通信的一些问题(1)
- python使用urllib.urlopen超时的问题
- 使用ObjectOutputStream进行socket通信的时候出现固定读到四个字节乱码的问题
- java与c/c++进行socket通信的一些问题(2)
- Python socket通信如何处理不定长的信息?
- 解决flash发布为html格式后无法进行socket通信的问题
- Apache mina 2.0.1 和 AS3 Socket 进行通讯(处理粘包问题)
- java和vb进行socket通信以及java与c/c++/oc 进行socket通信时汉字字符串编码问题解决
- java与c/c++进行socket通信的一些问题
- 如何干净的在服务中实现socket长链接与服务器通信并处理相应的线程问题(有更新)
- python的subprocess无法进行通信(无法通过管道输入数据)的问题解决
- Python socket 通信,同一台电脑可以正常访问而另一台电脑无法访问问题
- java与C进行socket通信中的通信异常问题
- 【Python开发】urllib2.urlopen超时问题
- java与c/c++进行socket通信的一些问题(1)-JSP教程,Java技巧及代码
- java与c/c++进行socket通信的一些问题(1)-JSP教程,Java技巧及代码
- python urllib2处理重定向的问题
- 关于安卓手机做客户端pc做服务器进行Socket通信出现问题的解决案方