我有一个函数,可以从给定的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
并下载文件,同时在{strong> {1> }}功能。
我觉得这对于初学者来说应该是一个普遍的问题,但是在这里找不到相关的问题。有关如何正确处理此问题的任何建议?
PS :我采取的一种方法是修改download_file
函数以接受download_file
对象或URL,以便包装程序可以通过错误检查回应对象。但是,问题在于,response
函数必须与download_file
中的response
对象一起调用。这将需要我检查main()
对象而不是包装器中的response
中的错误。