You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:40:23