Maneira limpa de lidar com exceção de arquivo não encontrado

Aug 16 2020

FUNDO

Eu tenho uma função onde eu armazeno em cache o arquivo do aws s3. Forneço o caminho em s3 e também o caminho local de onde desejo que o arquivo em cache fique. Às vezes, se o arquivo não existir no s3, ele retornará um erro 404. Isso faz sentido, mas eu quero lidar com isso graciosamente. O que eu quero fazer é se o arquivo que estou tentando armazenar em cache não existir, quero que minha função get_overview_stream retorne None.

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

Tentativa de solução do problema

Eu sou muito novo em python, então não tenho certeza se esta é a melhor maneira de lidar com essa exceção e se existe uma maneira mais limpa. Se assim for, eu adoraria ouvir comentários.

Respostas

1 D.SM Aug 18 2020 at 10:51

Sugiro não abrir o arquivo em sua função, mas retornar o caminho ou None, de modo que o chamador possa abrir o arquivo usando uma withinstrução.