Python调用Zendesk API报KeyError: 'tickets',JSON存在对应键如何解决?
问题根因
- 代码未做接口响应合法性校验,直接读取
response.json()的tickets键:当接口返回非预期结果时(如401鉴权失败、429请求限流、5xx服务异常),Zendesk返回的JSON结构仅包含错误提示字段,不存在tickets键,直接读取就会触发KeyError。 - 此前运行正常突然报错,最常见的原因是触发了Zendesk API的请求频率限制,其次是API凭证过期、对应视图ID的访问权限被调整。
修复方案
首先新增状态校验、容错处理和错误日志,定位具体错误后针对性处理,参考修改后的代码:
import time import requests # 原有其余代码保持不变 print(f'Getting tickets from view ID {view_id}') url = f'https://****.zendesk.com/api/v2/views/{view_id}/tickets.json' while url: response = requests.get(url, auth=auth) # 校验请求是否成功 if response.status_code != 200: print(f"请求异常,状态码:{response.status_code},返回内容:{response.text[:200]}") # 限流场景自动重试 if response.status_code == 429: wait_time = int(response.headers.get("Retry-After", 10)) time.sleep(wait_time) continue # 其他异常可根据需求选择跳出循环或抛出错误 break page_data = response.json() # 用get方法读取键,不存在时返回默认值,避免KeyError tickets = page_data.get("tickets", []) view_tickets.extend(tickets) url = page_data.get("next_page")
后续根据打印的错误信息处理即可:
- 如果是401/403错误:检查API凭证是否有效、账号是否有对应视图的访问权限
- 如果是404错误:检查视图ID是否被修改、删除
- 如果是限流错误:可以在每次循环末尾增加1-2秒的固定延迟,降低请求频率
内容的提问来源于stack exchange,提问作者Ebram Shehata
相关产品推荐
相关产品推荐

