Manière propre de gérer l'exception de fichier introuvable
CONTEXTE
J'ai une fonction où je mets en cache le fichier d'aws s3. Je lui fournis le chemin sur s3 ainsi que le chemin local de l'endroit où je veux que le fichier mis en cache vive. Parfois, si le fichier n'existe pas sur s3, il renverra une erreur 404. Cela a du sens, mais je veux le gérer avec élégance. Ce que je veux faire, c'est que si le fichier que j'essaie de mettre en cache n'existe pas, je veux que ma fonction get_overview_stream renvoie None.
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
Tentative de problème de solution
Je suis très novice en python, donc je ne sais pas si c'est la meilleure façon de gérer cette exception et s'il existe un moyen plus propre. Si c'est le cas, j'aimerais avoir des commentaires.
Réponses
Je suggérerais de ne pas ouvrir le fichier dans votre fonction, mais plutôt de renvoyer le chemin ou None
, de sorte que l'appelant puisse ouvrir le fichier à l'aide d'une with
instruction.