ファイルが見つからない例外を処理するクリーンな方法

Aug 16 2020

バックグラウンド

awss3からファイルをキャッシュする機能があります。s3のパスと、キャッシュされたファイルを配置するローカルパスを指定します。ファイルがs3に存在しない場合、404エラーが返されることがあります。それは理にかなっていますが、私はそれを優雅に扱いたいと思っています。キャッシュしようとしているファイルが存在しない場合、get_overview_stream関数がNoneを返すようにします。

コード

def get_overview_stream(*, environment, proxy_key):
    s3_overview_file_path = f"s3://{FOO_TRACK_BUCKET}/{environment}"
    overview_file = f"{proxy_key}.csv"
    local_path = cache_directory(environment)
    try:
        cache.cache_file(s3_overview_file_path, local_path, overview_file)
        overview_file_cache = local_path / f"{proxy_key}.csv"
        return overview_file_cache.open("r")
    except botocore.exceptions.ClientError as e:
        if e.response["Error"]["Code"] == "404":
            return None
        else:
            raise

解決策の問題の試行

私はPythonに非常に慣れていないので、これがこの例外を処理するための最良の方法であるかどうか、そしてよりクリーンな方法があるかどうかはわかりません。もしそうなら、私はフィードバックを聞きたいです。

回答

1 D.SM Aug 18 2020 at 10:51

関数でファイルを開くのではなくNone、呼び出し元がwithステートメントを使用してファイルを開くことができるように、パスまたはを返すことをお勧めします。