Python递归函数执行后返回None问题求助
问题原因与解决办法
为啥会输出None?
- 递归调用没传递返回值:当存在下一页时,你执行了
do_func(next_page, events_count)但没把这个递归调用的结果return出去。此时当前函数跑完这行代码后没有后续返回逻辑,Python函数默认返回None。只有递归到最后一页(无下一页)时,函数才会return data,但这个返回值没有被上层的递归调用传递回来,导致最外层调用do_func(url)最终拿到的是None。
怎么改?
在递归调用的地方加上return,让每一层递归都把最终的data传递回上层:
def do_func(path, events_count=0): # 打开连接并获取页面 u_client = uReq(path) # 原代码误用全局url,改成传入的path参数更合理 page_html = u_client.read() u_client.close() # 解析HTML page_soup = soup(page_html, "html.parser") data = {} data['name'] = page_soup.find("name").text events = page_soup.find_all("events") events_count += len(events) data["events"] = events_count # 修正拼写错误:nex_page → next_page next_page = page_soup.find("next_page") if next_page: # 递归调用并返回结果,注意提取下一页的链接属性(比如href) return do_func(next_page.get("href"), events_count) else: print(data) return data print(do_func(url))
额外提醒
- 原代码里
nex_page是拼写错误,必须改成next_page,否则永远找不到下一页,递归逻辑无法触发。 - 如果
next_page是BeautifulSoup的标签对象,需要提取它的链接属性(比如href)作为新的path参数传入,直接传标签对象会导致请求出错。 - 原代码第一行的
uReq(url)要改成uReq(path),避免依赖全局变量,符合函数参数传递的逻辑。
内容的提问来源于stack exchange,提问作者Mifayo
相关产品推荐
相关产品推荐

