You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pi Pico W调用NASA NeoW API时出现挂起问题求助

问题排查与修复方案

1. 日期格式不符合API要求

NASA NeoW API要求日期参数必须是YYYY-MM-DD格式,月份、日期需为两位数字(比如1月要写01而非1)。你的代码直接将整数转为字符串,生成的日期格式不符合要求,会导致API返回异常数据甚至请求失败。

修复代码:

# 格式化日期为标准格式,自动补零
date_today = f"{y:04d}-{m:02d}-{d:02d}"
date_yesterday = f"{y:04d}-{m:02d}-{d-1:02d}"
url = f'https://api.nasa.gov/neo/rest/v1/feed?start_date={date_yesterday}&end_date={date_today}&api_key={api_key}'

2. 未处理异常情况导致挂起

你的代码默认每天都有至少3个近地天体,且每个天体数据结构完整,但实际某天可能没有这么多数据,直接访问索引([0]/[1]/[2])会触发IndexError;同时链式调用.get()后直接访问属性,若某个节点不存在会触发AttributeError,这些未捕获的异常会导致Pi Pico W挂起。

另外,requests.get可能因网络波动、API限流抛出异常,同样需要捕获处理。

修复代码(添加异常捕获+安全数据访问):

try:
    neodata = requests.get(url, timeout=10)
    # 检查请求是否成功(比如401密钥错误、400参数错误都会触发)
    neodata.raise_for_status()
    neo_json = neodata.json()
    
    date_today = f"{y:04d}-{m:02d}-{d:02d}"
    # 安全获取当天的天体列表,默认空数组
    today_objects = neo_json.get('near_earth_objects', {}).get(date_today, [])
    
    # 最多处理3个天体,避免索引越界
    for idx, obj in enumerate(today_objects[:3]):
        # 逐层安全获取数据,不存在则返回默认值
        max_diameter = obj.get('estimated_diameter', {}).get('kilometers', {}).get('estimated_diameter_max', 'N/A')
        is_hazardous = obj.get('is_potentially_hazardous_asteroid', False)
        miss_distance = obj.get('close_approach_data', [{}])[0].get('miss_distance', {}).get('kilometers', 'N/A')
        asteroid_name = obj.get('name', 'Unknown')
        
        print(f"天体{idx+1}: {asteroid_name}, 最大直径: {max_diameter}km, 危险等级: {is_hazardous}, 错过距离: {miss_distance}km")

except requests.exceptions.RequestException as e:
    print(f"API请求失败: {str(e)}")
except (KeyError, IndexError) as e:
    print(f"数据解析错误: {str(e)}")

3. 内存优化(适配Pi Pico W)

Pi Pico W内存有限,你的代码多次重复调用neodata.json()会重复解析JSON数据,占用额外内存。建议先将JSON数据存入变量neo_json,再从中读取数据,减少内存消耗。

额外验证步骤

  • 直接在浏览器中访问生成的url,确认是否能返回正常JSON数据,排查API密钥是否正确、日期参数是否有效。
  • 检查Pi Pico W的WiFi信号强度,避免因网络不稳定导致请求超时挂起。

内容的提问来源于stack exchange,提问作者AtomicUnleashed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:54:51