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

如何在next_page为None时终止循环并解决字符串拼接类型错误?

解决API分页循环中的None拼接错误

嘿,我看到你在处理API分页收集请求URL的时候遇到了TypeError问题,咱们一步步来理清问题根源,然后搞定它!

问题出在哪?

首先,你碰到的TypeError: can only concatenate str (not "NoneType") to str,是因为当API返回的next_page是Python的None类型(不是字符串'None')时,你直接把它和基础URL拼接了,而None没法和字符串拼接。

另外你的循环和判断逻辑也有小问题:

  • 循环条件用了or:while hypermedia_np is not None or hypermedia_np != 'None',这意味着只要其中一个条件成立,循环就会继续。比如当hypermedia_np是None时,hypermedia_np != 'None'是True,循环会一直跑下去,这时候去拼接就直接报错了。
  • 你的判断只检查了next_page != 'None',但没处理next_page是None的情况,所以当API返回的是null(对应Python的None)时,这个判断拦不住,还是会去拼接。

修复后的完整代码

import requests  # 别忘了导入requests库,原代码里没写这行哦

pages = []
# 替换成你实际的headers和params
headers = {"Authorization": "your-token-here"}
params = {"some-param": "value"}

def build_requests(request):
    base_url = 'https://api.performancehorizon.com'
    # 处理初始请求
    full_initial_url = base_url + request
    response = requests.get(full_initial_url, headers=headers, params=params)
    response_data = response.json()
    pages.append(full_initial_url)
    
    # 获取第一页的next_page,统一处理成Python的None(不管API返回的是null还是字符串'None')
    next_page = response_data['hypermedia']['pagination']['next_page']
    if next_page == 'None':
        next_page = None
    
    # 循环:只有当next_page存在(不是None)时,才继续请求下一页
    while next_page is not None:
        # 这里已经确认next_page不是None,拼接不会报错
        full_next_url = base_url + next_page
        pages.append(full_next_url)
        
        # 请求下一页数据
        response = requests.get(full_next_url, headers=headers, params=params)
        response_data = response.json()
        
        # 更新next_page,同样处理字符串'None'的情况
        next_page = response_data['hypermedia']['pagination']['next_page']
        if next_page == 'None':
            next_page = None

# 调用函数,传入你的初始请求路径,比如'/some/initial/path'
build_requests('/your-initial-request-path')
print("Done!")

关键改进说明

  1. 统一处理"无下一页"的情况:把API可能返回的两种"无"(Python的None和字符串'None')统一转换成Python的None,这样只需要一个判断条件就能搞定,不用来回区分。
  2. 修正循环逻辑:直接用while next_page is not None,逻辑简单清晰——只要有下一页的有效路径,就继续循环;没有就终止。
  3. 提前确保拼接安全:在拼接URL之前,已经确认next_page不是None,彻底避免了TypeError。
  4. 代码简化:去掉了冗余的hypermedia_np变量,直接用next_page跟踪下一页路径,读起来更顺畅。

额外小建议

  • 可以加个异常处理,比如捕获请求失败的情况(比如requests.exceptions.RequestException),避免程序突然崩溃。
  • 如果API有时候会返回空字符串作为next_page,可以在判断里加上and next_page.strip() != '',根据实际的API返回调整就行。

内容的提问来源于stack exchange,提问作者Ben P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:41