API响应中total_count字段引发KeyError问题排查求助
问题修复方案
错误原因
从Postman返回的响应结构能看到,total_count、per_page、total_pages这些分页字段嵌套在page_info字典下,但你的代码直接从响应根层级(response['total_count'])获取这些字段,自然找不到对应键,触发KeyError。
修复步骤
1. 修正分页信息的提取逻辑
从响应的page_info字段中获取分页参数,优先使用API返回的total_pages(比自己计算更准确,避免整除误差):
getURL = 'https://example.com/v1/users' response = make_api_call(getURL) # 提取嵌套的分页信息 page_info = response['page_info'] # 直接用API返回的总页数,无需自行计算 total_pages = page_info['total_pages'] # 若必须自行计算(不推荐),需使用page_info内的字段: # total_pages = page_info['total_count'] // page_info['per_page'] + (1 if page_info['total_count'] % page_info['per_page'] != 0 else 0)
2. 修复分页函数的参数传递问题
原paginate_results函数调用api_call时,没有传递API的URL参数(make_api_call需要第一个参数为URL),导致调用逻辑错误。调整函数定义,让它接收URL参数:
def paginate_results(api_url, api_call_func, total_pages): results = [] for page_number in range(1, total_pages + 1): params = {'page': page_number} # 传递URL和分页参数调用API response = api_call_func(api_url, params=params) results.extend(response['data']) return results
3. 修正分页调用逻辑
调用分页函数时传入API URL:
results = paginate_results(getURL, make_api_call, total_pages)
可选:增强代码健壮性
为避免后续出现类似KeyError,可使用字典的get方法做容错处理:
response = make_api_call(getURL) page_info = response.get('page_info', {}) total_pages = page_info.get('total_pages', 1) # 默认值设为1,避免无数据时报错
完整修正代码
import requests headers = {"Your-Auth-Header": "Value"} # 确保headers已正确定义 def make_api_call(getURL, params={}): response = requests.get(getURL, params=params, headers=headers) response.raise_for_status() return response.json() def paginate_results(api_url, api_call_func, total_pages): results = [] for page_number in range(1, total_pages + 1): params = {'page': page_number} response = api_call_func(api_url, params=params) results.extend(response['data']) return results # 获取总页数 getURL = 'https://example.com/v1/users' response = make_api_call(getURL) page_info = response['page_info'] total_pages = page_info['total_pages'] # 分页获取结果 results = paginate_results(getURL, make_api_call, total_pages)
内容的提问来源于stack exchange,提问作者Arun.K
相关产品推荐
相关产品推荐

