私は、Python/Mechanizeで書かれた大量のダウンロードアプリケーションを持っています.20,000ファイルのようなものをダウンロードしようとしています。明らかに、大きなダウロードのダウンローダーは、時々エラーECONNRESET
に遭遇することがあります。今、私はeach of these individuallyを処理する方法を知っているが、それには二つの問題があります:Python/MechanizeでECONNRESETから回復する
- 私は本当にむしろ、try/catchブロック内のすべての単一のアウトバウンドのWeb呼び出しをラップしていないと思いますが。
私がそうしたとしても、例外がスローされたらエラーを処理する方法を知ることに問題があります。
data = None while (data == None): try: data = browser.response().read() except IOError as e: if e.args[1].args[0].errno != errno.ECONNRESET: raise data = None
それは
browser.follow_link(link)
の単なるランダムなインスタンスの場合は、その後どのように私は実行します。コードはちょうど
data = browser.response().read()
であれば、私はつまり、それに対処するために、正確に方法を知っています
ECONNRESET
がここに投げ込まれた場合、Mechanizeの内部状態はどうなっているのでしょうか?たとえば、コードをもう一度試す前にbrowser.back()
に電話する必要がありますか?そのようなエラーから回復する適切な方法は何ですか?
編集:受け入れられた回答の解決策は確実に機能しますが、私の場合は実装するのが難しくないことが判明しました。しかし、私はまだ学問的に興味がありますが、エラーを迅速に処理できるエラー処理メカニズムがあるかどうかに関心があります。
私は「核オプション」としてこれを考えていました。ありがとう! –
@Charles Pence:あなたはそれをより賢くすることができますが、それはtry ... exceptブロックを各Web呼び出しの周りに配置し、ケースごとに各エラーを処理することです。これは、プログラマだけが、任意の時点で障害が発生した場合に適切なアクションを決定することができるためです。 – unutbu
実際、これは私が考えていたよりも簡単に実装できることが判明しました。みんなありがとう! –