我是使用异常处理的新手。我正在使用机械化模块来抓取多个网站。我的程序经常失败,因为连接速度很慢,并且请求超时。我希望能够在每次尝试之间的30秒延迟后重试网站(例如超时),最多可重试5次。处理来自urllib2的异常和在Python中机械化
我看着this stackoverflow答案,可以看到我如何处理各种异常。我也看到了(虽然看起来很笨拙),我怎么可以把try/exception放在while循环中来控制5次尝试......但我不明白如何跳出循环,或者当连接时“继续”是成功的,并没有抛出异常。
from mechanize import Browser
import time
b = Browser()
tried=0
while tried < 5:
try:
r=b.open('http://www.google.com/foobar')
except (mechanize.HTTPError,mechanize.URLError) as e:
if isinstance(e,mechanize.HTTPError):
print e.code
tried += 1
sleep(30)
if tried > 4:
exit()
else:
print e.reason.args
tried += 1
sleep(30)
if tried > 4:
exit()
print "How can I get to here after the first successful b.open() attempt????"
我将不胜感激约(1)如何打破循环的一个成功的开放的意见,和(2)如何使整个街区少笨拙/更优雅。
谢谢所有。我完全赞同关于意大利面代码的评论。当我问到试图摆脱笨拙/不雅时,你的建议正是我寻找的那种东西。我也很欣赏我的代码不仅简单而且不合逻辑。我将纳入更改。 – user02814 2013-03-26 07:21:31