У меня есть функция, которая загружает файл с заданного 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()
вместо оболочки.