Python的urllib2库中如何检测超时错误

3
我对Python还比较陌生,如果这是一个显而易见的问题,我很抱歉。
我的问题与urllib2库及其urlopen函数有关。目前,我正在使用它来从另一台服务器加载大量页面(它们都在同一个远程主机上),但是脚本偶尔会因超时错误而被终止(我认为这是由于请求过多)。
是否有一种方法可以在超时后使脚本继续运行?我想能够获取所有页面,所以我需要一个脚本,它会不断尝试获取页面,然后继续执行。
另外,保持与服务器的连接是否有帮助?
2个回答

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

所以,如果我理解正确,这将使它一直“尝试”,直到它不返回错误? - Parker
@Parker:当Python执行try块中的代码时,如果出现urllib2.HTTPErrorurllib2.URLError异常,Python将跳转到except块。如果没有发生异常,则Python将跳转到else块。 - unutbu

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接