Чистый способ обработки исключения файл не найден

Aug 16 2020

ЗАДНИЙ ПЛАН

У меня есть функция, в которой я кеширую файл из aws s3. Я предоставляю ему путь на s3, а также локальный путь, по которому я хочу, чтобы кешированный файл жил. Иногда, если файл не существует на s3, он возвращает ошибку 404. В этом есть смысл, но я хочу справиться с этим изящно. Что я хочу сделать, так это если файл, который я пытаюсь кэшировать, не существует, я хочу, чтобы моя функция get_overview_stream возвращала None.

КОД

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

Попытка решения проблемы

Я очень новичок в python, поэтому не уверен, что это лучший способ справиться с этим исключением и есть ли более чистый способ. Если так, я хотел бы услышать отзывы.

Ответы

1 D.SM Aug 18 2020 at 10:51

Я бы предложил не открывать файл в вашей функции, а вместо этого возвращать путь или None, чтобы вызывающий мог открыть файл с помощью withоператора.