2015-12-23 49 views
1

我正在尝试此代码,并获取以lat,lng和位置开头的行中的错误。任何人都可以帮忙吗?Python无类型对象不可自订

import urllib.parse 
import urllib.request 
import json 
while True: 
    address = input('Enter location: ') 
    if len(address) < 1 : break 
    serviceurl = 'http://python-data.dr-chuck.net/geojson' 
    url = serviceurl + '?' + urllib.parse.urlencode({'sensor':'false', 'address': address}) 
    response = urllib.request.urlopen(url) 
data = response.readall().decode('utf-8') 
js = json.loads(str(data)) 
if 'status' not in js or js['status'] != 'OK': 
    print ('==== Failure To Retrieve ====') 
    print (data) 
    continue 
    print (json.dumps(js, indent=4)) 

    lat = js["results"][0]["geometry"]["location"]["lat"] 
    lng = js["results"][0]["geometry"]["location"]["lng"] 
    print('lat',lat) #,('lng'),lng 
    location = js['results'[0]]['formatted_address'] 
    print(location) 

感谢, 阿伦

+0

至少一个的字段是空的 – Pynchia

+0

如果你打印整个'js'对象,你会看到它有什么字段。 – Turn

+0

除了你的问题...不要这样做:'如果'状态'或'确定'js == False'。因为:1. js'中的''status'或者'OK'总是评估为'status',并且2.你永远不想比较'True'或'False'。要么做“如果有事”或“如果不是事”。这可以帮助你避免一些意想不到的问题。顺便说一句'status'或'OK'in js == False'也计算为''status'',所以你的'if'永远是真的;) – zvone

回答

1

错误,NoneType object is not subscriptable意味着你试图做的:js["results"][0]["geometry"]["location"]["lat"],这意味着js["results"][0]["geometry"]["location"]["lat"]不存在,即:

None[something] 

如果在此行中发生沿着该路径评估为None。

例如,如果jsNone,则尝试评估None["results"]时将失败。

或者,如果js["results"][0]None,它会失败尝试做None["geometry"]

顺便说一句,这很可能是jsNone,因为你有这样的:

except: js = None 
+0

好的。感谢所有的评论。我修改了代码编辑的问题,我得到这个错误 - '提高HTTPError(req.full_url,代码,味精,hdrs,fp) urllib.error.HTTPError:HTTP错误400:错误请求' –

+0

这就是你的回应从服务器获取。它不喜欢这个请求。也许你错过了一些数据,或者你误解了某些东西,或者服务器期望会话cookie或者谁知道什么...... – zvone