python - 递归后我得到一个错误(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)
解决方案
目前还不清楚错误发生在哪里,因为上面的代码不包含任何迭代。最好包括错误的那一部分。
无论如何,错误可能是由于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)
推荐阅读
- java - 重载时equals方法的行为如何?
- python - python:在数据帧范围内填充元组中的元组
- javascript - 术语:制表符是不间断空格吗?
- swift - 如何按日期筛选领域列表 Swift NSPredicates
- node.js - 我按照 Watson Tone 分析器的 api 文档无济于事 - 无法连接两个端点
- traefik - 设置 Traefik 以仅使用 CLI 使用 Let's Encrypt 要求客户端证书
- c++ - 我的代码中出现分段错误(SIGSEGV)
- node.js - 猫鼬地理定位动态最大距离
- java - 通知无需遵循 AlarmManager 即可工作
- java - 如何从这些字符中获取整数值?