Maneira limpa de lidar com exceção de arquivo não encontrado
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
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 with
instrução.