Manière propre de gérer l'exception de fichier introuvable

Aug 16 2020

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

1 D.SM Aug 18 2020 at 10:51

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 withinstruction.