Python从JSON API获取'last'值遇KeyError问题求助
解决API获取'last'字段时的KeyError问题
我明白你折腾了好几种Python脚本还是碰到KeyError有多头疼——明明API返回里确实有'last'字段,就是拿不到,太闹心了。咱们一步步排查可能的问题,试试下面的方法:
先确认API返回的实际结构
很多时候KeyError不是因为字段不存在,而是它嵌套在更深的层级里。比如你直接写data['last'],但实际上'last'可能在ticker或者其他子字典下面。先写个简单脚本打印整个响应结构:import requests response = requests.get("https://cryptohub.online/api/market/ticker/PLSR/") data = response.json() print("API返回的完整数据:", data)看打印结果,如果是类似
{"ticker": {"last": 0.00123, ...}}这种结构,那你得用data['ticker']['last']才能拿到值,直接取data['last']肯定会报错。检查请求是否真的成功
有时候请求可能被拦截、返回错误页面(比如403/500状态码),这时候解析出来的JSON根本不是你预期的内容。先加个状态码检查:print("响应状态码:", response.status_code) if response.status_code != 200: print("请求失败了,可能是被限流或者API地址有变化")如果状态码不对,可能需要加请求头(比如User-Agent)模拟浏览器请求,或者确认API地址是否有效。
排查JSON解析是否有问题
少数情况下API返回的不是标准JSON,比如有多余的注释、前缀后缀,导致解析后结构异常。可以先打印原始响应文本看看:print("原始响应文本:", response.text)如果文本里有非JSON内容,可能需要先处理掉(比如用正则去掉多余部分)再解析。
完整的调试示例脚本
给你写个带异常处理的脚本,方便定位问题:import requests try: url = "https://cryptohub.online/api/market/ticker/PLSR/" # 模拟浏览器请求,避免被拦截 headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"} response = requests.get(url, headers=headers) response.raise_for_status() # 主动抛出HTTP错误 data = response.json() print("完整返回结构:", data) # 根据实际结构调整路径,这里假设last在ticker下 if "ticker" in data and "last" in data["ticker"]: last_value = data["ticker"]["last"] print(f"成功获取last值:{last_value}") else: print("未找到'last'字段,请检查返回的键名和层级") except requests.exceptions.RequestException as e: print(f"请求过程出错:{e}") except KeyError as e: print(f"KeyError:缺少字段'{e}',请确认字段路径") except ValueError: print("JSON解析失败,返回内容不是标准JSON")
如果运行后还是有问题,把打印出来的完整返回结构贴出来,就能精准找出问题所在啦。
内容的提问来源于stack exchange,提问作者AngelKitten
相关产品推荐
相关产品推荐

