2010-08-18 64 views
3

我还是比较新的Python,所以如果这是一个明显的问题,我很抱歉。在Python的urllib2中检测超时错误urlopen

我的问题是关于urllib2库,它是urlopen函数。目前我正在使用它从另一台服务器加载大量页面(它们都在同一个远程主机上),但是脚本每隔不久就会被一个超时错误(我认为这是来自大量请求)终止。

有没有办法在超时后继续运行脚本?我希望能够获取所有的页面,所以我想要一个脚本,它会一直试图获取页面,然后继续前进。

请注意,会保持连接打开服务器的帮助吗?

回答

2

下次发生错误时,请记下错误消息。最后一行会告诉你异常的类型。例如,它可能是urllib2.HTTPError。一旦您知道引发的异常类型,您可以在try...except区块中找到它。例如:

import urllib2 
import time 

for url in urls: 
    while True: 
     try: 
      sock=urllib2.urlopen(url) 
     except (urllib2.HTTPError, urllib2.URLError) as err: 
      # You may want to count how many times you reach here and 
      # do something smarter if you fail too many times. 
      # If a site is down, pestering it every 10 seconds may not 
      # be very fruitful or polite. 
      time.sleep(10) 
     else:    
      # Success 
      contents=sock.read() 
      # process contents 
      break    # break out of the while loop 
+0

所以,如果我理解正确的话,这将使其“尝试”,直到它不返回一个错误? – Parker 2010-08-18 18:05:20

+0

@Parker:当Python到达'try'块中的代码时,如果发生'urllib2.HTTPError'或'urllib2.URLError',Python将转到'except'块。如果没有发生异常,那么Python将转到'else'块。 – unutbu 2010-08-18 18:09:32

相关问题