Cara bersih untuk menangani file tidak ditemukan pengecualian

Aug 16 2020

LATAR BELAKANG

Saya memiliki fungsi di mana saya menyimpan file dari aws s3. Saya menyediakannya jalur di s3 dan juga jalur lokal di mana saya ingin file yang di-cache tinggal. Terkadang jika file tidak ada di s3 itu akan mengembalikan kesalahan 404. Itu masuk akal tetapi saya ingin menanganinya dengan anggun. Yang ingin saya lakukan adalah jika file yang saya coba cache tidak ada, saya ingin fungsi get_overview_stream saya mengembalikan None.

KODE

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

Masalah Solusi yang Dicoba

Saya sangat baru mengenal python jadi saya tidak yakin apakah ini cara terbaik untuk menangani pengecualian ini dan jika ada cara yang lebih bersih. Jika demikian saya ingin mendengar tanggapan.

Jawaban

1 D.SM Aug 18 2020 at 10:51

Saya menyarankan untuk tidak membuka file dalam fungsi Anda tetapi mengembalikan jalur atau None, sehingga pemanggil dapat membuka file menggunakan withpernyataan.