为啥在尝试从 api 获取数据时出现此错误“TypeError:字符串索引必须是整数”?

     2023-03-16     183

关键词:

【中文标题】为啥在尝试从 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项目,你帮我完成了。再次,非常感谢。???

为啥在尝试使用 NodeJS 和 Tedious 将数据插入 SQL Server 时出现此错误?

】为啥在尝试使用NodeJS和Tedious将数据插入SQLServer时出现此错误?【英文标题】:WhydoIgetthiserrorwhiletryingtoinsertdatatoSQLServerwithNodeJSandTedious?为什么在尝试使用NodeJS和Tedious将数据插入SQLServer时出现此错误?【发布时间】:2021-12-2405:42... 查看详情

为啥当我尝试在 MariaDB 数据库上创建此函数(使用点数据类型)时出现此错误?

】为啥当我尝试在MariaDB数据库上创建此函数(使用点数据类型)时出现此错误?【英文标题】:WhyIobtainthiserrorwhenItrytocreatethisfuncion(thatusepointdatatype)onaMariaDBdatabase?为什么当我尝试在MariaDB数据库上创建此函数(使用点数据类型)... 查看详情

为啥在尝试将 UIPopover 附加到不同类中的 UIButton 时出现此构建错误?

】为啥在尝试将UIPopover附加到不同类中的UIButton时出现此构建错误?【英文标题】:WhythisbuilderrorwhentryingtoattachaUIPopovertoaUIButtoninadifferentclass?为什么在尝试将UIPopover附加到不同类中的UIButton时出现此构建错误?【发布时间】:2014-0... 查看详情

为啥在尝试使用指针访问结构时出现此分段错误?

】为啥在尝试使用指针访问结构时出现此分段错误?【英文标题】:whyamigettingthissegmentationfaultwhentryingtoaccessastructusingapointer?为什么在尝试使用指针访问结构时出现此分段错误?【发布时间】:2020-12-1206:21:22【问题描述】:我正... 查看详情

为啥在尝试将 Angular 父组件的属性绑定到子组件时出现此错误?

】为啥在尝试将Angular父组件的属性绑定到子组件时出现此错误?【英文标题】:WhyamIobtainingthiserrortryingtobindthepropertiesfromanAngularparentcomponenttoachildcomponent?为什么在尝试将Angular父组件的属性绑定到子组件时出现此错误?【发布时... 查看详情

为啥在尝试将 Hibernate Spatial 用于 Spring Boot 项目时出现此错误?实例化异常

】为啥在尝试将HibernateSpatial用于SpringBoot项目时出现此错误?实例化异常【英文标题】:WhyIhavethiserrortryingtouseHibernateSpatialintoaSpringBootproject?InstantiationException为什么在尝试将HibernateSpatial用于SpringBoot项目时出现此错误?实例化异常... 查看详情

为啥调用 API 时出现 CORS 错误

】为啥调用API时出现CORS错误【英文标题】:WhyI\'mhavingCORSerrorwhencallinganAPI为什么调用API时出现CORS错误【发布时间】:2020-06-1716:41:34【问题描述】:我在前端使用Angular,在后端使用C#,当我尝试编辑字段并保存时出现此错误:Acces... 查看详情

为啥在使用 Cordova 构建 APK 时出现此错误?

】为啥在使用Cordova构建APK时出现此错误?【英文标题】:WhydoIgetthiserrorwhilebuildinganAPKwithCordova?为什么在使用Cordova构建APK时出现此错误?【发布时间】:2020-08-0410:11:33【问题描述】:我正在尝试制作一个网络应用程序的APK,我将... 查看详情

运行天气应用程序时出现此错误我正在使用 json 和 http 库来获取数据但我不知道为啥会出现此错误

...出现此错误我正在使用json和http库来获取数据但我不知道为啥会出现此错误【英文标题】:ThiserrorappearswhenrunningtheweatherappIamusingjsonandhttplibrarytofetchdatabutIdon\'tknowwhythiserrorappears运行天气应用程序时出现此错误我正在使用json和http库... 查看详情

尝试从反应应用程序连接到 graphcool 中继 API 时出现此错误:模块构建失败:错误:没有有效的 GraphQL 端点

】尝试从反应应用程序连接到graphcool中继API时出现此错误:模块构建失败:错误:没有有效的GraphQL端点【英文标题】:IgetthiserrorwhentryingtoconnecttoagraphcoolrelayAPIfromareactapp:Modulebuildfailed:Error:NovalidGraphQLendpoint【发布时间】:2018-05-24... 查看详情

为啥在我的程序中打开某些 wav 文件时出现此错误“EMCIDeviceError”

】为啥在我的程序中打开某些wav文件时出现此错误“EMCIDeviceError”【英文标题】:WhydoIgetthiserror"EMCIDeviceError"whenopeningsomewavfilesinmyprogram为什么在我的程序中打开某些wav文件时出现此错误“EMCIDeviceError”【发布时间】:2010-... 查看详情

当我尝试从 Mysql 中获取数据时出现此问题 客户端中的握手错误(OS ErrorWRONG_VERSION_NUMBER(tls_record.cc:242)

】当我尝试从Mysql中获取数据时出现此问题客户端中的握手错误(OSErrorWRONG_VERSION_NUMBER(tls_record.cc:242)【英文标题】:IhavethisproblemwhenitrytoGetDataFromMysqlinflutterHandshakeerrorinclient(OSErrorWRONG_VERSION_NUMBER(tls_record.cc:242)【发布时间】:20... 查看详情

为啥在为 ROR 安装 DevKit 时出现此错误

】为啥在为ROR安装DevKit时出现此错误【英文标题】:WhyamIgettingthiserrorduringDevKitinstallforROR为什么在为ROR安装DevKit时出现此错误【发布时间】:2014-09-1121:08:16【问题描述】:我同时使用--force和不使用。仍然没有骰子。这一切都开始... 查看详情

为啥在将应用程序部署到 Heroku 时出现此错误?

】为啥在将应用程序部署到Heroku时出现此错误?【英文标题】:WhydoIobtainthiserrorwhendeployingapptoHeroku?为什么在将应用程序部署到Heroku时出现此错误?【发布时间】:2016-04-1010:27:18【问题描述】:使用github将我的应用程序部署到herok... 查看详情

在尝试解析 JSON 数据 W/System.err 时出现此错误:org.json.JSONException:对客户没有价值

】在尝试解析JSON数据W/System.err时出现此错误:org.json.JSONException:对客户没有价值【英文标题】:GettingthiserrorwhilttryingtoparseJSONdataW/System.err:org.json.JSONException:Novalueforcustomers【发布时间】:2019-12-1923:24:48【问题描述】:我正在尝试... 查看详情

为啥在尝试对整个 Spring Batch Job 进行单元测试时出现此错误?没有可用的“org.springframework.batch.core.Job”类型的合格bean

】为啥在尝试对整个SpringBatchJob进行单元测试时出现此错误?没有可用的“org.springframework.batch.core.Job”类型的合格bean【英文标题】:WhythiserrortryingtounittestanentireSpringBatchJob?Noqualifyingbeanoftype\'org.springframework.batch.core.Job\'available为... 查看详情

为啥在尝试使用 Angular 检索数据库信息时出现错误 415?

】为啥在尝试使用Angular检索数据库信息时出现错误415?【英文标题】:Whyamigettingerror415whentryingtoretrievedatabaseinformationwihtangular?为什么在尝试使用Angular检索数据库信息时出现错误415?【发布时间】:2021-03-0116:54:02【问题描述】:... 查看详情

由于目标被视为被动,无法在被动事件侦听器中阻止默认值?为啥滚动时出现此错误?

...目标被视为被动,无法在被动事件侦听器中阻止默认值?为啥滚动时出现此错误?【英文标题】:UnabletopreventDefaultinsidepassiveeventlistenerduetotargetbeingtreatedaspassive?Whythiserroruponscrolling?由于目标被视为被动,无法在被动事件侦听器中... 查看详情