[英]Python function returns None in elif or else
我有 dict 类型的变量 r。 变量 item 包含一个项目列表,total_results 是一个 int。 只要满足项目数小于项目总数的条件,就递归调用该函数。 但是,如果我测试项目是否等于总结果,则返回语句返回 None。 将此 elif 更改为 if 确实会返回正确的值。
有人能指出我正确的方向来找出为什么在 elif 或 else 块中返回 r 会产生 None 吗?
非常感谢!!
相关代码片段:
if len(items) < total_results:
params['start_index'] = len(items)
self.fetch_company_officers(company_number=company_number, items=items, **params)
elif len(items) == total_results:
r['items'] = items
return r
完整代码:
def fetch_company_officers(self, company_number, items=None, **kwargs):
uri = 'company/{}/officers'.format(company_number)
params = kwargs
r = self.make_request(uri=uri, **params)
# Test if items are set
if items is None:
items = r['items']
else:
items.extend(r['items'])
# Iterate multiple pages
total_results = r['total_results']
if len(items) < total_results:
params['start_index'] = len(items)
self.fetch_company_officers(company_number=company_number, items=items, **params)
elif len(items) == total_results: # TO DO: ??
r['items'] = items
return r
您的函数缺少以下场景的处理逻辑len(items) > total_results
。
所以函数到达行尾并默认返回 None
我想我明白你想要做什么,但递归不是这里的方法。 只要 ( while
) 您检索的项目数小于您期望的结果总数,您就希望继续从下一页获取项目。 所以..让我们使用一个while
循环!
这是我的代码版本。 请注意,我无法对此进行测试,因为我没有您的其余代码。
def fetch_company_officers(self, company_number, **params):
# Start with an empty list of items
items = []
# Make the first request
uri = f"company/{company_number}/officers"
response = self.make_request(uri=uri, **params)
# Extract information from the first batch
items += response.get("items", [])
total_results = response.get("total_results")
# Stop iterating when we don't know the total number of results to expect
if total_results is None:
return items
# Keep getting more results until our list of items
# is as long as the total number of results we expect
while len(items) < total_results:
# Get the next page
response = self.make_request(uri=uri, start_index=len(items), **params)
# Extract information from this batch
items += response.get("items", [])
# We've now retrieved everything
return items
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.