黑客新闻API,KeyError:“标题

时间:2018-07-08 21:01:15

标签: python web

刚刚开始学习python,我也开始学习它的基于Web的一面。

按照我的指示,我在第18行上不断收到KeyError:'title'。现在,我将其视为请求未返回标题,从而给出了错误,我将如何编写它以给出一般性描述如果没有“标题”?

import requests

from operator import itemgetter as ig

url = 'https://hacker-news.firebaseio.com/v0/topstories.json'
r = requests.get(url)
print("Status Code:", r.status_code)

submission_ids= r.json()
submission_dicts = []
for submission_id in submission_ids[:30]:
    url= ("https://hacker-news.firebaseio.com/v0/item" + str(submission_id) + '.json')
    submission_r = requests.get(url)
    print(submission_r.status_code)
    response_dict = submission_r.json()

    submission_dict = {
    'title': response_dict['title'],
    'link': "https://news.ycombinator.com/item?id=" +str(submission_id),
    'comments': response_dict.get('descendants', 0)
}

submission_dicts = sorted(submission_dicts, key= ig('comments'), reverse= True)

for submission_dict in submission_dicts:
    print("\nTitle:", submission_dict['title'])
    print("Discussion link:", submission_dict['link'])
    print("Comments:", submission_dict['comments'])
  

状态码:200      401      追溯(最近一次通话):         中的文件“ C:\ Users \ Shit Head \ Documents \ Programming \ Tutorial Files \ hn_submissions.py”,第18行           'title':response_dict ['title'],       KeyError:“标题”       [在1.2秒内完成]

1 个答案:

答案 0 :(得分:0)

  

按照我的指示,我在第18行上不断收到KeyError:'title'。现在,我将其视为请求未返回标题,从而给出了错误,我将如何编写它以给出一般性描述如果没有“标题”?

听起来您只是在寻找get方法:

  

get(key[, default])

     
    

如果 key 在字典中,则返回 key 的值,否则返回 default 。如果未给出 default ,则默认为None,因此此方法永远不会引发KeyError

  

所以,代替这个:

'title': response_dict['title'],

...您这样做:

'title': response_dict.get('title', 'Generic Hacker News Submission'),

在幕后,这只是一种更方便的方式来编写无论如何您都可以完成的事情。以下内容几乎是等效的:

title = response_dict.get('title', 'Generic')

title = response_dict['title'] if title in response_dict else 'Generic'

if title in response_dict:
    title = response_dict['title']
else:
    title = 'Generic'

try:
    title = response_dict['title']
except KeyError:
    title = 'Generic'

这是值得知道的,因为Python通常仅在真正常见的情况下(例如在字典中查找内容)提供get之类的快捷方式。如果要使用相同的操作,例如,一个列表可能为空或只有一个项目,或者文件可能存在或可能不存在,或者正则表达式可能返回与组字符串匹配的结果或可能返回None ,您需要做很多事情。