【问题标题】:Python NoneType object is not subscriptable [duplicate]Python NoneType 对象不可下标[重复]
【发布时间】:2016-03-30 11:05:53
【问题描述】:

我正在尝试此代码并在以 lat、lng 和 location 开头的行中出现错误。有人可以帮忙吗?

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)

谢谢, 阿伦

【问题讨论】:

  • 至少有一个字段为空
  • 如果您打印整个 js 对象,您将看到它有哪些字段。
  • 除了你的问题......不要这样做:if 'status' or 'OK' in js == False。因为:1. 'status' or 'OK' in js 总是评估为 'status',并且 2. 你永远不想与 TrueFalse 进行比较。要么做if something要么if not something。这将使您避免一些意想不到的问题。顺便说一句,'status' or 'OK' in js == False 也计算为'status',所以你的if 总是正确的;)

标签: python json api


【解决方案1】:

错误,NoneType object is not subscriptable 表示您尝试这样做:

None[something]

如果它发生在这一行:js["results"][0]["geometry"]["location"]["lat"],则意味着 js["results"][0]["geometry"]["location"]["lat"] 不存在,即沿该路径的某些东西被评估为无。

例如,如果jsNone,它将无法尝试评估None["results"]

或者,如果js["results"][0]None,它将无法尝试执行None["geometry"] 等。

顺便说一句,js 很可能是None,因为你确实有这个:

except: js = None

【讨论】:

  • 好的。感谢所有的cmets。我修改了编辑问题的代码,我收到了这个错误 - raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 400: Bad Request
  • 这是你从服务器得到的响应。它不喜欢这个请求。也许您丢失了一些数据,或者您拼错了一些东西,或者服务器需要一个会话 cookie 或者谁知道......
猜你喜欢
  • 2020-02-22
  • 2021-09-17
  • 2017-03-11
  • 2015-02-27
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2019-08-12
相关资源
最近更新 更多