ファイルが見つからない例外を処理するクリーンな方法
バックグラウンド
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
関数でファイルを開くのではなくNone
、呼び出し元がwith
ステートメントを使用してファイルを開くことができるように、パスまたはを返すことをお勧めします。