Python中用while循环结合next page token调用API及无限循环排查
问题分析与解决方案
你的代码陷入无限循环,同时还存在数据漏存的问题,核心原因和修复方案如下:
核心问题
- 最后一页数据漏存:当前逻辑仅在API返回
next_page_token时保存数据,没有该字段的最后一页结果完全没被存储。 - 违反Google API分页规则:Google Places API要求分页请求之间必须等待至少2秒,直接连续请求会导致服务器重复返回相同的
next_page_token,触发无限循环。 - 变量名冲突:
type是Python内置关键字,用作变量名可能引发潜在问题。
修正后的代码
import time import pandas as pd if __name__ == '__main__': # 获取所有业务类型 df = pd.read_csv('business_type.csv') # 遍历每个业务类型 for biz_type in df['business_type']: token = '' while True: # 调用Google API response = make_google_api_call(biz_type, token) # 优先保存当前页数据(包含最后一页) save_data(response) # 检查是否存在下一页token if "next_page_token" in response: token = response['next_page_token'] # 强制等待2秒,遵守API分页限制 time.sleep(2) else: # 无下一页,终止循环 break
额外注意事项
- 如果仍出现循环,检查
make_google_api_call是否正确将API返回的JSON字符串解析为Python字典,同时要处理API可能返回的错误(如请求超限、网络异常),这类错误也可能导致循环无法终止。 - 可以在循环中添加计数器,比如超过N次请求就强制终止,避免极端情况下的无限循环。
内容的提问来源于stack exchange,提问作者alexa tang
相关产品推荐
相关产品推荐

