当有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