我仍然相对较新的Python,所以如果这是一个显而易见的问题,我道歉。
我的问题是关于urllib2库,它是urlopen函数。目前我正在使用它来加载来自另一台服务器的大量页面(它们都在同一个远程主机上),但是脚本会偶尔被超时错误杀死(我假设这是来自大型请求)。
有没有办法让脚本在超时后继续运行?我希望能够获取所有页面,所以我想要一个不断尝试的脚本,直到它获得一个页面,然后继续前进。
在旁注中,是否会保持连接对服务器的帮助?
答案 0 :(得分: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
答案 1 :(得分:1)