Czysty sposób obsługi wyjątku nie znaleziono pliku

Aug 16 2020

TŁO

Mam funkcję, w której buforuję plik z aws s3. Podaję mu ścieżkę na s3, a także lokalną ścieżkę, w której chcę, aby znajdował się plik w pamięci podręcznej. Czasami, jeśli plik nie istnieje na s3, zwróci błąd 404. To ma sens, ale chcę sobie z tym poradzić z wdziękiem. Chcę zrobić, jeśli plik, który próbuję zapisać w pamięci podręcznej, nie istnieje. Chcę, aby funkcja get_overview_stream zwróciła wartość Brak.

KOD

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

Próba rozwiązania problemu

Jestem bardzo nowy w Pythonie, więc nie jestem pewien, czy jest to najlepszy sposób obsługi tego wyjątku i czy istnieje bardziej przejrzysty sposób. Jeśli tak, chciałbym usłyszeć opinie.

Odpowiedzi

1 D.SM Aug 18 2020 at 10:51

Sugerowałbym, aby nie otwierać pliku w swojej funkcji, ale zamiast tego zwracał ścieżkę lub Nonetak, aby dzwoniący mógł otworzyć plik za pomocą withinstrukcji.