【问题标题】:TypeError in Python ProgramPython程序中的TypeError
【发布时间】:2018-07-28 13:24:51
【问题描述】:

您好,我正在编写一个程序,它会提示输入位置、联系 Web 服务并检索 Web 服务的 JSON 并解析该数据,并从 JSON 中检索第一个 place_id。

我正在尝试查找 place_id:上海交通大学

我已经编写了代码,但我无法让它工作。它必须是一个小错误,因为当我运行它时,我会收到一条消息,上面写着

place_id = process_json['results'][0]['place_id']
TypeError: list indices must be integers or slices, not str

这是我的代码

    import urllib.request, urllib.parse, urllib.error
    import json

    serviceurl = 'http://py4e-data.dr-chuck.net/geojson??'

    while True:
        location = input('Enter location: ')
        if len(location) < 1: break
        url = serviceurl + urllib.parse.urlencode(
            {'address': location})
        print ('Retrieving', url)
        data = urllib.request.urlopen(url)
        read_data = data.read().decode()
        print ('Retrieved',len(read_data),'characters') 
        try:
            process_json = json.loads(read_data)
        except:
            process_json = None

        place_id = process_json['results'][0]['place_id']
        print ('Place id:', place_id)

【问题讨论】:

  • 我猜process_json是一个列表,或者process_json['results'][0]是一个列表,你把它当成字典了
  • @chrisz 是的,它是一个列表。那么我该怎么做才能不把它当作字典呢?对不起这个简单的问题......我是python的新手
  • 您无法访问这样的列表:L['string_here'],您必须使用整数索引访问列表,例如:L[0]L[1] 等。

标签: python json typeerror


【解决方案1】:

这里的问题是您将列表视为字典。顾名思义,列表是具有递增索引0, 1, 2.. 的项目列表。字典很像一个列表,只是它的索引是命名的。

您的代码不起作用的原因是,从 URL 返回的 JSON 是一个列表。它看起来像这样:

[
    "AGH University of Science and Technology",
    "Academy of Fine Arts Warsaw Poland",
    "American University in Cairo",
    "Arizona State University",
    "Athens Information Technology",
    "BITS Pilani",
]

您似乎正在尝试查找大学的place_id,但您正在搜索的数据中没有place_id。但如果有,您的方法是正确的,但它没有考虑对于没有输入大学确切名称的用户。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2017-04-27
    • 2018-11-10
    • 2018-03-09
    • 2017-11-01
    • 2013-03-18
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多