无法将API返回的整数/浮点数数据存入Python本地变量求解决
问题分析与修复
你这段代码有几个明确的错误,导致无法正常运行:
- 变量名冲突引发KeyError:循环中你把原本是字典的
exercise变量,重新赋值成了exercise["exercise"](字符串类型),后续再尝试获取exercise["duration"]时,字符串没有键索引,自然报错。 - 引用未定义变量:f-string里的
{name}从未定义,你实际想调用的是锻炼名称,也就是exercise["exercise"],但因为变量名冲突,这里也无法正确取值。 - 缺失API请求错误处理:没有校验API请求是否成功,若请求返回404、401等错误状态,直接解析
json()也会触发异常。
修正后的代码
from urllib import request import requests import datetime # 变量定义 SHEET_ENDPOINT = "https://api.sheety.co/c2508c72b1a9443966fca6445ff27747/workoutTracker/workouts" # 请求API并处理错误 inbound = requests.get(SHEET_ENDPOINT) # 请求失败时直接抛出异常,便于排查问题 inbound.raise_for_status() RESULT = inbound.json() drum = [] # 修改循环变量名,避免与字典键冲突 for workout in RESULT["workouts"]: date = workout["date"] time = workout["time"] exercise_name = workout["exercise"] duration = workout["duration"] calories = workout["calories"] # 使用正确的变量名拼接字符串 g = f"Date:{date}\nTime:{time}\nExercise:{exercise_name}\nDuration:{duration}\nCalories:{calories}" drum.append(g) for item in drum: print(item)
关键修改说明
- 将循环变量从
exercise改为workout,用exercise_name单独存储锻炼名称,彻底避免变量名冲突 - 替换f-string中的
name为已定义的exercise_name - 添加
inbound.raise_for_status(),在API请求失败时立即抛出错误,帮助排查地址、权限等问题
内容的提问来源于stack exchange,提问作者Dezynarh
相关产品推荐
相关产品推荐

