Modo pulito per gestire l'eccezione di file non trovato

Aug 16 2020

SFONDO

Ho una funzione in cui memorizzo nella cache il file da aws s3. Fornisco il percorso su s3 e anche il percorso locale di dove voglio che il file memorizzato nella cache viva. A volte se il file non esiste su s3 restituirà un errore 404. Ha senso, ma voglio gestirlo con garbo. Quello che voglio fare è se il file che sto cercando di memorizzare nella cache non esiste, voglio che la mia funzione get_overview_stream restituisca None.

CODICE

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

Tentativo di soluzione Problema

Sono molto nuovo in Python, quindi non sono sicuro che questo sia il modo migliore per gestire questa eccezione e se esiste un modo più pulito. Se è così mi piacerebbe sentire un feedback.

Risposte

1 D.SM Aug 18 2020 at 10:51

Suggerirei di non aprire il file nella tua funzione ma di restituire invece il percorso o None, in modo tale che il chiamante possa aprire il file utilizzando withun'istruzione.