【问题标题】:KeyError in Python, even though the key existsPython中的KeyError,即使密钥存在
【发布时间】:2020-04-29 15:15:13
【问题描述】:

这几天我一直在摸不着头脑,似乎找不到可以在线解决我的问题的解决方案。我正在尝试访问 zendesk 上的数据并进行分页。出于某种原因,我得到了一个 KeyError,即使我可以看到该密钥确实存在。这是我的代码:

data_users2 = [[]]
while url_users:
    users_pagination = requests.get(url_users,auth=(user, pwd))

    data_user_page = json.loads(users_pagination.text)

    print (data_user_page.keys())

    for user in data_user_page['users']:
        data_users2.append(user)
    url = data_user_page['next_page']

这是输出:

dict_keys(['users', 'next_page', 'previous_page', 'count'])
dict_keys(['error'])
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-22-fab95d95ddeb> in <module>
      6     data_user_page = json.loads(users_pagination.text)
      7     print (data_user_page.keys())
----> 8     for user in data_user_page["users"]:
      9         data_users2.append(user)
     10     url = data_user_page["next_page"]

KeyError: 'users' 

如您所见,用户确实存在。如果我尝试打印 next_page,也会发生同样的事情,我得到 next_page 的 KeyError。

任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 请注意,您打印了两组密钥。 KeyError 不是来自第一次迭代,其中实际上存在“用户”键,而是来自仅包含“错误”键的第二次迭代。 (换句话说,你在确定下一页的 URL 时做错了。)
  • 您将url 设置为下一页,但在下次调用requests.get 时仍使用url_users。您可能希望在进入循环之前设置url = url_users,然后在每次迭代时调用requests.get(url, ...)
  • 不敢相信我错过了,谢谢!但是,我仍然给我这个错误....

标签: python python-3.x list


【解决方案1】:

您的代码在循环的第二次迭代中失败,此时您在data_user_page 中的键只是“错误”,正如您在粘贴的输出中看到的那样

dict_keys(['users', 'next_page', 'previous_page', 'count']) <----- FIRST ITERATION
dict_keys(['error']) <---- SECOND ITERATION, THEREFORE, YOUR KEY DOES NOT EXISTS
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-22-fab95d95ddeb> in <module>
      6     data_user_page = json.loads(users_pagination.text)
      7     print (data_user_page.keys())
----> 8     for user in data_user_page["users"]:
      9         data_users2.append(user)
     10     url = data_user_page["next_page"]

KeyError: 'users' 

编辑:这可能是因为您将下一个 url 保存在一个名为 url 而不是 url_users 的变量中

【讨论】:

  • 好电话!对不起,我错过了。但是,一旦我更改它,仍然会收到消息!
  • 输出一样吗?
猜你喜欢
  • 1970-01-01
  • 2019-12-07
  • 2021-01-07
  • 2019-11-10
  • 1970-01-01
  • 2018-08-17
  • 2017-10-21
  • 1970-01-01
  • 2020-02-26
相关资源
最近更新 更多