2

私は相対的な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()
4

2 に答える 2