首页 > 解决方案 > 递归后我得到一个错误(TypeError:'NoneType'对象不可迭代)

问题描述

我正在尝试request.get()使用代理,我使用try/except. 如果我的代理错误,我会使用except, 更改代理并再次启动此功能。

递归后我得到了所有需要的值和

TypeError:“NoneType”对象不可迭代

我不知道为什么?

PS:如果代码不调用Except就可以正常工作

def get_html_v2(url, proxy, userAgent):
    data = None
    status = None
    userAgent = userAgent or ''
    proxies = {
        "http": "http://"+proxy,
        "https":"http://"+proxy
    }
    try:
        # Get request
        response = requests.get(url=url, headers=userAgent, proxies=proxies)
        # Get a status of the request
        status = response.status_code
        # Return request values and status
        return response.text, int(status)
    # If proxy doesn't work
    except ConnectionError:
        # Remove wrong proxy from List
        proxiesList.remove(proxy)
        # Get new proxy
        proxy = random.choice(proxiesList)
        # Start function again
        get_html_v2(url, userAgent=userAgent, proxy=proxy)

标签: pythonpython-requeststypeerrornonetype

解决方案


目前还不清楚错误发生在哪里,因为上面的代码不包含任何迭代。最好包括错误的那一部分。

无论如何,错误可能是由于get_html_v2您的except块而发生的。您调用 get_html_v2()了 except 块,但没有将该结果返回给调用者/上一个递归循环,无论如何您都必须这样做,尤其是递归。

在您的except块的最后一行中,替换:

 get_html_v2(url, userAgent=userAgent, proxy=proxy)

和:

 return get_html_v2(url, userAgent=userAgent, proxy=proxy)

这样,您就可以有效地返回从块return response.text, int(status)中的行返回的值try

PS:如果代码不调用Except就可以正常工作

except块被调用时,由于没有return,它隐式返回None。当它没有被调用时,它正在返回response.text, int(status)


推荐阅读