<blockquote>
<p>How do I make sure that I check my JSON output</p>
</blockquote>
<p>此时,“JSON输出”只是一个普通的原生Python <code>dict</code></p>
<blockquote>
<p>for a key before assigning it to a variable? If a key isn’t found, then I just want to assign a default value</p>
</blockquote>
<p>现在您知道您有一个<code>dict</code>,浏览<code>dict</code>方法的官方文档应该可以回答以下问题:</p>
<p><a href="https://docs.python.org/3/library/stdtypes.html#dict.get" rel="nofollow noreferrer">https://docs.python.org/3/library/stdtypes.html#dict.get</a></p>
<blockquote>
<p><strong>get(key[, default])</strong></p>
<p>Return the value for key if key is in the dictionary, else default. If default is not given, it defaults to None, so that this method never raises a KeyError.</p>
</blockquote>
<p>所以一般情况是:</p>
<pre><code>var = data.get(key, default)
</code></pre>
<p>现在,如果您有深度嵌套的dict/list,其中可能缺少任何键或索引,那么捕捉KeyErrors和indexerErrors会更简单:</p>
^{pr2}$
<p>另请注意:代码片段中充满了重复的<code>channel_info_response_data['items'][0]['statistics']</code>和<code>channel_info_response_data['items'][0]['snippet']</code>表达式。使用中间变量将使代码更易读、更易于维护,并且速度更快:</p>
<pre><code># always set a timeout if you don't want the program to hang forever
channel_info_response = requests.get(channel_info_url, timeout=30)
# always check the response status - having a response doesn't
# mean you got what you expected. Here we use the `raise_for_status()`
# shortcut which will raise an exception if we have anything else than
# a 200 OK.
channel_info_response.raise_for_status()
# requests knows how to deal with json:
channel_info_response_data = channel_info_response.json()
# we assume that the response MUST have `['items'][0]`,
# and that this item MUST have "statistics" and "snippets"
item = channel_info_response_data['items'][0]
stats = item["statistics"]
snippet = item["snippet"]
no_of_videos = int(stats.get('videoCount', 0))
no_of_subscribers = int(stats.get('subscriberCount', 0))
no_of_views = int(stats.get('viewCount', 0))
avg_views = round(no_of_views / no_of_videos, 0)
try:
photo = snippet['thumbnails']['high']['url']
except KeyError:
photo = None
description = snippet.get('description', "")
start_date = snippet.get('publishedAt', None)
title = snippet.get('title', "")
try:
keywords = item['brandingSettings']['channel']['keywords']
except KeyError
keywords = ""
</code></pre>
<p>您可能还想了解字符串格式(连续的字符串很容易出错,几乎不可读),以及<a href="http://docs.python-requests.org/en/master/user/quickstart/#passing-parameters-in-urls" rel="nofollow noreferrer">how to pass arguments to ^{<cd6>}</a></p>