Python包装器导致冗余函数调用

时间:2018-11-28 21:58:58

标签: python-3.x python-requests wrapper urllib3

我有一个函数,可以从给定的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> { }}功能。

我觉得这对于初学者来说应该是一个普遍的问题,但是在这里找不到相关的问题。有关如何正确处理此问题的任何建议?

PS :我采取的一种方法是修改download_file函数以接受download_file对象或URL,以便包装程序可以通过错误检查回应对象。但是,问题在于,response函数必须与download_file中的response对象一起调用。这将需要我检查main()对象而不是包装器中的response中的错误。

0 个答案:

没有答案