私は相対的なpython初心者であり、例外を適切に処理する方法に混乱しています。ばかげた質問をお詫びします。
私の main() では、日付のリストを繰り返し処理し、日付ごとに関数を呼び出して、パブリック Web サーバーから csv ファイルをダウンロードします。明らかな理由で例外を適切にキャッチしたいのですが、特に、関心のあるファイルがいつダウンロード可能になるかわからないためです。私のプログラムは cron ジョブの一部として実行され、可能であればこれらのファイルを 3 時間ごとにダウンロードしようとします。
私が望むのは、日付のリストの最初のファイルをダウンロードすることです。その結果が 404 の場合、プログラムは次のファイルに進むべきではありません。リストの最も古い日付が利用できない場合は、それ以降の他のものも利用可能になります。
次のpython疑似コードがあります。ファイルをダウンロードしようとする関数内に try/except ブロックがありますが、関数内で例外が発生した場合、main() で適切に処理するにはどうすればよいので、次の日付に進むかどうかを決定できます。ダウンロードを実行する関数を作成した理由は、そのコードを後で他のファイル タイプの同じ main() ブロックで再利用したいからです。
def main():
...
...
# datelist is a list of date objects
for date in datelist:
download_file(date)
def download_file(date):
date_string = str(date.year) + str(date.strftime('%m')) + str(date.strftime('%d'))
request = HTTP_WEB_PREFIX+ date_string + FILE_SUFFIX
try:
response = urllib2.urlopen(request)
except urllib2.HTTPError, e:
print "HTTPError = " + str(e)
except urllib2.URLError, e:
print "URLError = " + str(e)
except httplib.HTTPException, e:
print "HTTPException = " + str(e)
except IOError:
print "IOError = " + str(e)
except Exception:
import traceback
print "Generic exception: " + traceback.format_exc()
else:
print "No problem downloading %s - continue..." % (response)
try:
with open(TMP_DOWNLOAD_DIRECTORY + response, 'wb') as f:
except IOError:
print "IOError = " + str(e)
else:
f.write(response.read())
f.close()