Sauberer Weg, um die Ausnahme „Datei nicht gefunden“ zu behandeln

Aug 16 2020

HINTERGRUND

Ich habe eine Funktion, bei der ich eine Datei von aws s3 zwischenspeichere. Ich gebe den Pfad auf s3 und auch den lokalen Pfad an, in dem die zwischengespeicherte Datei gespeichert werden soll. Wenn die Datei auf s3 nicht existiert, wird manchmal ein 404-Fehler zurückgegeben. Das macht Sinn, aber ich möchte es anmutig handhaben. Was ich tun möchte, ist, wenn die Datei, die ich zwischenspeichern möchte, nicht existiert, möchte ich, dass meine get_overview_stream-Funktion None zurückgibt.

CODE

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

Problem mit versuchter Lösung

Ich bin sehr neu in Python, daher bin ich mir nicht sicher, ob dies der beste Weg ist, um mit dieser Ausnahme umzugehen, und ob es einen saubereren Weg gibt. Wenn ja würde ich gerne Feedback hören.

Antworten

1 D.SM Aug 18 2020 at 10:51

Ich würde vorschlagen, die Datei nicht in Ihrer Funktion zu öffnen, sondern stattdessen den Pfad oder zurückzugeben None, sodass der Aufrufer die Datei mit einer withAnweisung öffnen kann.