Python调用API迭代日期时如何处理无事件提示以继续循环
处理API返回的"无事件"提示,完成完整日期迭代
嘿,这个问题我熟!其实你不用把这种“无事件”的返回当成异常来处理,因为API根本没抛出错误——它只是返回了一个告知你没有数据的正常响应。咱们换个思路,在拿到响应后主动判断内容就行了,这样就能顺畅完成整个迭代啦。
核心思路
- 用
try-except只处理真正的异常:比如网络连接失败、HTTP错误(4xx/5xx)、JSON解析失败这些意外情况。 - 对于API返回的正常响应(包括“无事件”的提示),主动检查返回内容里的
message字段,判断是否属于“无事件”的情况,若是则直接跳过当前日期,继续下一次循环。
代码示例
import requests from datetime import datetime, timedelta # 定义日期范围 start_date = datetime(2023, 1, 1) end_date = datetime(2023, 1, 31) current_date = start_date # 存储筛选后的数据 result_list = [] while current_date <= end_date: date_str = current_date.strftime("%Y-%m-%d") try: # 调用API,替换成你的实际API地址 response = requests.get(f"https://your-api-url.com/events?date={date_str}") # 触发HTTP错误的异常(比如404、500) response.raise_for_status() # 解析JSON响应 api_response = response.json() # 检查是否是"无事件"的提示 if api_response.get("message") == "No events scheduled for this date.": print(f"📅 日期 {date_str} 没有安排事件,跳过") current_date += timedelta(days=1) continue # 这里写你的数据筛选逻辑,比如提取需要的字段 filtered_data = { "date": date_str, "events": api_response.get("events", []) # 假设正常响应里有events字段 } result_list.append(filtered_data) except requests.exceptions.RequestException as e: # 处理请求相关的异常(网络问题、HTTP错误等) print(f"❌ 日期 {date_str} 请求出错: {str(e)}") except ValueError: # 处理JSON解析失败的情况 print(f"❌ 日期 {date_str} 解析响应失败,不是有效的JSON") # 推进到下一个日期 current_date += timedelta(days=1) print(f"✅ 迭代完成!共收集到 {len(result_list)} 条有效数据")
关键细节说明
response.raise_for_status():这个方法会在HTTP状态码不是2xx的时候抛出异常,帮你捕获真正的请求错误,而不是把“无事件”这种正常响应当成错误。api_response.get("message"):用get方法而不是直接api_response["message"],可以避免当API返回的结构里没有message字段时抛出KeyError,更安全。- 灵活调整判断条件:如果API的提示消息可能有细微变化(比如大小写、措辞),可以改用字符串包含的方式,比如:
if "No events scheduled" in api_response.get("message", ""):
这样处理后,你的循环就能完整遍历所有日期,不会因为“无事件”的正常响应而中断啦~
内容的提问来源于stack exchange,提问作者jatin singh
相关产品推荐
相关产品推荐

