使用Python调用World Weather Online API提取数据失败问题咨询
排查Python调用World Weather Online API中断问题
问题描述
我用Python调用World Weather Online API提取10年历史天气数据并保存为CSV,但程序在提取到2017年6月后就停止运行了。之前能成功提取数据,现在要排查是API端还是本地代码的问题。
相关截图信息
- 代码片段截图:展示了循环遍历日期区间、构造API请求URL、处理响应并写入CSV的核心逻辑,包含
requests.get()调用、日期格式化和文件写入操作。 - 输出结果截图:CSV文件里只有2017年6月及之前的天气数据,之后没有新数据写入,程序没报错就直接终止了。
排查步骤
一、API端问题排查
- 检查API调用限制:登录World Weather Online控制台,查看API的调用次数、请求频率限制是否触发。部分套餐可能对历史数据查询的时间范围有限制(比如仅允许查询近X年),确认2017年6月之后的数据是否在可查询范围内。
- 手动测试API请求:构造2017年6月之后某一天的请求URL,直接在浏览器或Postman中发送请求,查看是否能正常返回数据。比如构造类似
http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=YOUR_KEY&q=LOCATION&format=json&date=2017-07-01&enddate=2017-07-01的请求,观察响应是否正常、是否有错误信息。 - 查看API状态公告:访问World Weather Online官方网站或开发者平台,查看是否有API服务中断、数据范围调整的公告,确认是否是平台侧的问题。
二、本地代码问题排查
- 添加异常捕获与日志:在代码中增加异常捕获逻辑,捕获
requests请求可能出现的超时、连接错误、HTTP错误(比如403/404/500),并打印详细错误信息。示例:
import requests try: response = requests.get(api_url, timeout=10) response.raise_for_status() # 触发HTTP错误异常 # 处理响应数据 except requests.exceptions.RequestException as e: print(f"请求出错:{e},当前请求日期:{current_date}")
- 检查日期循环逻辑:确认日期生成循环在2017年6月之后是否出现终止或跳变。比如检查
datetime模块生成日期序列的代码,是否存在日期格式错误、循环条件错误导致提前退出。 - 验证数据写入逻辑:检查CSV写入操作是否存在缓冲区未刷新、文件句柄意外关闭的情况。可以在每次写入后调用
csv_writer.flush(),或者确保文件操作在with语句块中执行,避免资源泄漏。 - 测试单日期请求:单独测试2017年6月之后的某一天数据提取,看代码是否能正常处理该日期的响应,是否存在数据解析错误导致程序崩溃。
内容的提问来源于stack exchange,提问作者AVINASH SOY
相关产品推荐
相关产品推荐

