people={ "alice":{ "phone":"2341", "addr":"for drive 23" }, "beth":{ "phone":"9012", "addr":"bsr street 42" }, "cecil":{ "phone":"3158", "addr":"baz avenue 90" }}#针对电话号码和地址使用的描述性标签,会在打印时候用到labels={ "phone":"phone number", "addr":"address"}name=raw_input("Name:")#查找电话号码还是地址?request=raw_input("phone number(p) or address (a)?")#使用正确的键:if request=="p":key="phone"if request=="a":key="addr"#如果名字是字典中的有效键方才打印信息:if name in people:print "%s's %s is %s."%\ (name.labels[key],people[name][key])提示错误为:File "c:\Users\DULU\Desktop\untitled-1.py", line 32, in <module> (name.labels[key],people[name][key])AttributeError: 'str' object has no attribute 'labels'(这是什么意思,看不懂呀)
3 回答
已采纳
longgb246
TA贡献1条经验 获得超1个赞
1、if name in people等价于if name in people.keys(),
你的代码里面people.keys()有:"alice"、"beth"、"cecil"。这3个都是string类型,string类型没有labels这个属性。
这也就是你的报错信息:'str' object has no attribute 'labels'。
string类型本身就没有labels这个属性,别告诉我你连这个都不知道。所以你后面引用name.labels[key]就会报错。
2、还有你print的参数个数不对,个人不太喜欢%,偏向于.format()。
我大致知道你想干嘛,就是输入姓名和p、a输出,结果是吧,最后几行你改下:
# 使用正确的键: if request == "p": key = "phone" if request == "a": key = "addr" # 如果名字是字典中的有效键方才打印信息: if name in people.keys(): print "%s's %s is %s." % (name, key, people[name][key]) # 你可以尝试下面的.format() print "{0}'s {1} is {2}.".format(name, key, people[name][key])
个人强烈建议,python代码不要写在一行,缩进才是它的规范。
添加回答
举报
0/150
提交
取消