Python使用datetime循环请求接口报KeyError: 'departures'问题求助
问题解决方法
- 核心错误:循环拼接URL时错误使用了整个
dates列表而非循环变量
你代码中写的是url = "https://X{}".format(dates),但遍历的单日期变量是i,应该改为url = "https://X{}".format(i)。你把整个日期列表拼到了URL中,请求的地址本身就是非法的,返回的JSON大概率是接口报错结构,不存在departures字段,这是触发KeyError的根本原因。 - 次要错误:
date21变量未定义就添加到了dates列表
你仅计算了date7、date14两个日期,没有定义date21就执行了dates.append(date21),如果实际运行代码未补全该变量定义会先抛出NameError,补全代码如下:date21 = date + datetime.timedelta(days=21) date21 = date21.strftime("%Y%m%d") - 稳定性优化建议:请求后增加状态校验和字段存在性判断,避免异常
可以先判断请求状态码是否正常,再判断返回的JSON中是否存在departures字段再取值,优化后的完整循环代码示例:for i in dates : url = "https://X{}".format(i) url_request = requests.get(url) # 先判断请求是否成功 if url_request.status_code == 200: url_request_data = url_request.json() # 再判断字段是否存在 if "departures" in url_request_data: print(len(url_request_data["departures"])) else: print(f"日期{i}的返回数据无departures字段,返回内容:{url_request_data}") else: print(f"日期{i}请求失败,状态码:{url_request.status_code}")
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

