GET请求数据解析时dict.get()不返回指定默认值,无限循环如何解决
问题原因梳理
- 核心逻辑错误:你当前的
newResults取值完全取决于data['tickets']列表的最后一个元素。只要最后一个元素存在id键,newResults就会被赋值为真值的id数值,永远不会触发你设置的False默认值。如果某一页返回的tickets是空列表,for循环不会执行,newResults会保留上一轮的真值,直接进入无限循环。 - 请求参数异常:构造URL时
per_page= {per_page}的等号后多了一个空格,会导致服务器无法正确识别分页参数,可能始终返回前几页的有效数据,永远不会走到无数据的终止页。 - 隐性风险:循环变量名用了Python内置函数
id,可能引发命名冲突;如果tickets列表中的元素不是字典类型,调用get()方法会直接报错,你可以添加type()打印排查返回结构是否符合预期。
修复方案
你需要修改终止条件的判断逻辑,每次请求新页面后先重置终止标记,只要本页存在有效ticket才继续翻页,参考代码如下:
import requests newResults = True pages = 9 while newResults: # 移除per_page参数后的多余空格 Request = f"{url}?key={API_Key}&ts={ts}&hash={hash}&project_id={project_id}&per_page={per_page}&page={pages}&date_from={date_from}&date_to={date_to}" r = requests.get(Request) data = r.json() # 先默认本页无有效数据,只要有符合要求的ticket就改回True newResults = False # 修改变量名避免和内置id冲突 for ticket in data['tickets']: ticket_id = ticket.get('id', False) if ticket_id: newResults = True # 此处添加你原本的ticket处理逻辑 pages += 1
内容的提问来源于stack exchange,提问作者GuiAT
相关产品推荐
相关产品推荐

