Python代码报错:list indices must be integers or slices, not str 修复求助
问题修复方案
错误原因
你遇到的TypeError是因为目标URL返回的JSON数据本身就是一个卫星对象的列表,而非包含satellites键的字典。代码里data["satellites"]试图用字符串索引列表,自然触发类型错误。
修复后的代码
import urllib.request import json planets = ["Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"] for planet in planets: url = f"http://derekowens.com/cs/satellites.aspx?p={planet}" response = urllib.request.urlopen(url) # 直接将API返回的卫星列表赋值给moons moons = json.loads(response.read()) # 仅计算一次最近卫星,避免重复调用min方法 closest_moon = min(moons, key=lambda x: x["orbit_radius"]) print(f"{planet}, {closest_moon['moon']}, {closest_moon['orbit_radius']}")
关键修改说明
- 移除了错误的
moons = data["satellites"]语句,因为API返回的JSON本身就是卫星数据列表,无需提取satellites字段。 - 优化了
min方法的调用逻辑,只计算一次最近卫星数据,再从中提取名称和轨道半径,减少重复计算。
内容的提问来源于stack exchange,提问作者venus
相关产品推荐
相关产品推荐

