为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?
Posted
技术标签:
【中文标题】为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?【英文标题】:Why am I getting this error "TypeError: string indices must be integers" when trying to fetch data from an api?为什么在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”? 【发布时间】:2021-10-06 15:54:24 【问题描述】:json file =
"success": true,
"terms": "https://curr
"privacy": "https://cu
"timestamp": 162764598
"source": "USD",
"quotes":
"USDIMP": 0.722761,
"USDINR": 74.398905,
"USDIQD": 1458.90221
json文件在上面。我从 json 中删除了很多值,因为它占用了太多空间。我的python代码在下面。
import urllib.request, urllib.parse, urllib.error
import json
response = "http://api.currencylayer.com/live?access_key="
api_key = "42141e*********************"
parms = dict()
parms['key'] = api_key
url = response + urllib.parse.urlencode(parms)
mh = urllib.request.urlopen(url)
source = mh.read().decode()
data = json.loads(source)
pydata = json.dumps(data, indent=2)
print("which curreny do you want to convert USD to?")
xm = input('>')
print(f"Hoe many USD do you want to convertxmto")
value = input('>')
fetch = pydata["quotes"][0]["USDxm"]
answer = fetch*value
print(fetch)
--------------------------------
这里是 输出 "fetch = pydata["quotes"][0]["USDxm"] TypeError: 字符串索引必须是整数"
【问题讨论】:
"USDxm"
不能称为列表索引的索引。您所做的通常是为字典完成的。要获取列表的值,只需要整数
根据您的示例数据,pydata['quotes'] 指的是一个字典(不是数组),其键为 'USDIMP'、'USDINR' 和 'USDIQD'。因此,您需要类似 pydata['quotes']['USDINR']
@Sujay 示例 JSON 中没有列表
@Sujay fetch = pydata["quotes"]["USDINR"] TypeError: string indices must be integers ...当我直接添加 INR 时也出现同样的错误
@Sujay 当我直接尝试从 python 字典中获取它时,这是错误 fetch = data["quotes"][0]["USDINR"] KeyError: 'quotes'
【参考方案1】:
首先,您在此处发布的 JSON 数据无效。缺少引号和逗号。例如这里"terms": "https://curr
。它必须是"terms": "https://curr",
。 "privacy"
相同,"timestamp"
缺少逗号。 修复 JSON 数据后,我找到了解决方案。你必须使用data
而不是pydata
。这意味着您必须将fetch = pydata["quotes"][0]["USDxm"]
更改为fetch = data["quotes"][0]["USDxm"]
。但这会导致下一个错误,即 KeyError,因为在您提供给我们的 JSON 数据中,"qoutes"
键之后没有数组。所以你必须摆脱这个[0]
或者json数据必须像这样:
"quotes":[
"USDIMP": 0.722761,
"USDINR": 74.398905,
"USDIQD": 1458.90221
]
最后,您只需将 data["quotes"]["USDxm"]
更改为 data["quotes"]["USD"+xm]
,因为当您在输入中键入“IMP”时,python 会尝试查找名为 USDxm
而不是 USDIMP
的键。我希望这可以解决您的问题。
【讨论】:
非常感谢 Felix,是的,它成功了。这是我的第一个python项目,你帮我完成了。再次,非常感谢。???以上是关于为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?
为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?
运行天气应用程序时出现此错误我正在使用 json 和 http 库来获取数据但我不知道为啥会出现此错误
尝试从反应应用程序连接到 graphcool 中继 API 时出现此错误:模块构建失败:错误:没有有效的 GraphQL 端点