TypeError: string indices must be integers

当有input().strip(控制台输入)的时候,要注意出现:
TypeError: string indices must be integers
(解决办法在最后哟)

例: 我想输入字典类型的数据,并传入change(data)函数中,通过该数据中的关键字‘backend’找到他对应的值。

我输入的数据是:

[{'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':'30','maxconn':'4000'}},
{'backend':'www.oldboy1.org','record:':{'server':'2.2.2.4','weight':'40','maxconn':'5000'}}]

我想要的数据是:

'www.oldboy1.org'

得到数据的方式是:

#这里data={'backend':'www.oldboy1.org','record':{'server':'2.2.2.5','weight':'30','maxconn':'4000'}}
#data[0]='backend':'www.oldboy1.org',我想要'www.oldboy1.org'
backend=data[0]['backend']  

代码错误位置及结果

TypeError                                 Traceback (most recent call last)
<ipython-input-6-0d5ba8ed0325> in <module>()
     59         data = input('请输入你的数据:').strip()
     60 
---> 61         res =msg_dic[choice](data)    #调用change(data)函数
     62         print(res)

<ipython-input-6-0d5ba8ed0325> in change(data)
     28     print('这是修改函数')
     29     print('用户输入的数据是',data)
---> 30     backend=data[0]['backend']  
     31     res = fetch(backend)
     32     print(res)

TypeError: string indices must be integers

出现错误的原因

你的data是input().strip()接收的,input接收的都是字符串(不管你输入的是什么格式的)
但是在change函数中的想要操作的对象是列表型数据。

解决办法

将字符串型数据转换成列表型数据,使用特别好用的eval()(data=eval(data)),但是要有区分操作,因为本身就是str的不可用eval()

补充:
eval()的作用:
1、可以将字符串中的数据结构提取出来

k=eval('[1,2,3]')
k[0]

结果: 1

2、可以把表达式执行一遍

k=eval('1-2/1+3*1')
k

结果: 2.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值