私は例外処理の初心者です。mechanizeモジュールを使用して、いくつかのWebサイトをスクレイプしています。接続が遅く、リクエストがタイムアウトしたため、プログラムが頻繁に失敗します。各試行の間に30秒の遅延が発生した後、最大5回(たとえば、タイムアウト時に)Webサイトを再試行できるようにしたいと思います。
このstackoverflowの回答を見て、さまざまな例外を処理する方法を確認できます。また、(非常に不器用に見えますが)試行/例外を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)ブロック全体を不器用でなく/よりエレガントにする方法についてアドバイスをいただければ幸いです。