Оболочка Python вызывает избыточные вызовы функций

У меня есть функция, которая загружает файл с данного URL и вызывается из функции более высокого уровня, т.е. main(),

from requests import get
...

def download_file(url):
    response = get(url)
    ...
    <error checks on response>
    ...
    # if no error, write response to file
    ...
    file.write(response)

def main(url):
    ...
    download_file(url)

Тем не менее, я понял, что я должен разместить все проверки ошибок для response объект за пределами download_file функция. Итак, я попытался обернуть download_file функционировать так, чтобы все проверки ошибок происходили вне его.

def check_errors(func):
    def check_and_download(url):
        response = get(url)   
        ...
        <error checks on response>
        ...
        return func(url) # <- I have to call response = get(url) again. That's bad
    return check_and_download

Как вы можете видеть, эта обертка вызывает response позвонить дважды. Один раз за пределами функционала и один раз внутри. Это просто избыточно. Я пытаюсь найти способ, который позволит мне позвонить response только один раз и загрузите файл с проверкой ошибок вне download_file функция.

Я чувствую, что это должно быть обычной проблемой для начинающих, но я не могу найти соответствующие вопросы здесь. Любые предложения о том, как правильно с этим бороться?

PS: один из подходов, которые я выбрал, состоял в том, чтобы изменить download_file функция принять response вместо объекта или URL, чтобы оболочка могла передать объект ответа с проверкой на ошибки. Однако проблема в том, что download_file функция должна быть вызвана с response объект в main(), Что потребует от меня, чтобы проверить response объект для ошибок в main() вместо обертки.

0 ответов

Другие вопросы по тегам