关于使用Python json模块时的Keyerror

时间:2016-09-03 14:33:38

标签: python json python-3.x

如果指出错误,

会有所帮助。 在这里我试图通过Pincode作为输入创建一个显示城市州和国家名称的代码,提前谢谢

    import urllib, json
from urllib.request import urlopen
from tkinter import *
global pincode
root=Tk()
frame=Frame(root,width=250,height=250)
frame.grid()
class cal:

    def __init__(self):
        self.string=StringVar()
        entry=Entry(frame,textvariable=self.string)
        entry.grid(row=1,column=2,columnspan=6)
        but=Button(root,text="submit",command=self.pin)
        but.grid()
    def pin(self):
        pincode=self.string.get()

        url = "https://www.whizapi.com/api/v2/util/ui/in/indian-city-by-postal-code?pin="+pincode+"&project-app-key=fnb1agfepp41y49jz6a39upx"
        response = urllib.request.urlopen(url)
        data = json.loads(response.read().decode('utf8'))
        fi=open("neme.txt","w")
        fi.write(str(data))        
        state=data['State']
        city=data['City']
        area=data['area']
        name=Label(frame,text="State:"+state+"City:"+city+"area:"+area)
        name.grid(row=3,column=0)







    cal()

    mainloop()

错误

Traceback (most recent call last):
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__
    return self.func(*args)
  File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Pn_code.py", line  24, in pin
    state=data['State']
KeyError: 'State'

1 个答案:

答案 0 :(得分:1)

确定。错误告诉您,您没有名为" State"你在var match = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|?(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])?[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.exec(cardno);变量下的词典。所以也许也没有让json陷入困境。

如果您回复:

data
然后你就得不到" State"使用:

{"ResponseCode":0,"ResponseMessage":"OK","ResponseDateTime":‌​"9/3/2016 2:41:25 PM GMT","Data":[{"Pincode":"560103","Address":"nagar","City":"B‌​analore","State":"na‌​taka","Country":"Ind‌​ia"}]}

你必须使用:

data["State"]

其余的:

data["Data"][0]["State"]

为什么这样?因为你必须得到嵌套键,第一个键是data["Data"][0]["City"] data["Data"][0]["Country"] ,使用"Data"你收到一个列表,并且因为它是一个元素列表,你必须获得列表的第一项:{ {1}}。在data["Data"]下的最后,你可以找到关键字,你可以找到州,城市,国家。