Manera limpia de manejar la excepción de archivo no encontrado

Aug 16 2020

ANTECEDENTES

Tengo una función donde guardo en caché el archivo de aws s3. Le proporciono la ruta en s3 y también la ruta local donde quiero que viva el archivo en caché. A veces, si el archivo no existe en s3, devolverá un error 404. Eso tiene sentido, pero quiero manejarlo con gracia. Lo que quiero hacer es si el archivo que estoy tratando de almacenar en caché no existe, quiero que mi función get_overview_stream devuelva Ninguno.

CÓDIGO

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

Intento de problema de solución

Soy muy nuevo en python, así que no estoy seguro de si esta es la mejor manera de manejar esta excepción y si hay una forma más limpia. Si es así, me encantaría escuchar comentarios.

Respuestas

1 D.SM Aug 18 2020 at 10:51

Sugeriría no abrir el archivo en su función, sino devolver la ruta o None, de modo que la persona que llama pueda abrir el archivo usando una withdeclaración.