我还是比较新的Python,所以如果这是一个明显的问题,我很抱歉。在Python的urllib2中检测超时错误urlopen
我的问题是关于urllib2库,它是urlopen函数。目前我正在使用它从另一台服务器加载大量页面(它们都在同一个远程主机上),但是脚本每隔不久就会被一个超时错误(我认为这是来自大量请求)终止。
有没有办法在超时后继续运行脚本?我希望能够获取所有的页面,所以我想要一个脚本,它会一直试图获取页面,然后继续前进。
请注意,会保持连接打开服务器的帮助吗?
我还是比较新的Python,所以如果这是一个明显的问题,我很抱歉。在Python的urllib2中检测超时错误urlopen
我的问题是关于urllib2库,它是urlopen函数。目前我正在使用它从另一台服务器加载大量页面(它们都在同一个远程主机上),但是脚本每隔不久就会被一个超时错误(我认为这是来自大量请求)终止。
有没有办法在超时后继续运行脚本?我希望能够获取所有的页面,所以我想要一个脚本,它会一直试图获取页面,然后继续前进。
请注意,会保持连接打开服务器的帮助吗?
下次发生错误时,请记下错误消息。最后一行会告诉你异常的类型。例如,它可能是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 2010-08-18 18:05:20
@Parker:当Python到达'try'块中的代码时,如果发生'urllib2.HTTPError'或'urllib2.URLError',Python将转到'except'块。如果没有发生异常,那么Python将转到'else'块。 – unutbu 2010-08-18 18:09:32