我正在尝试解析我现在在JSON文件中收集的一些推文数据。问题是一些推文中没有“用户”或“位置”。结果,我得到的消息如下:
File "<stdin>", line 18, in <module>
KeyError: 'user'
所以我尝试添加一个if-else语句,但它仍然给我错误信息。你下一步怎么做?
for line in lines:
try:
tweet = json.loads(line)
# Ignore retweets!
if tweet.has_key("retweeted_status") or not tweet.has_key("text"):
continue
# Fetch text from tweet
text = tweet["text"].lower()
# Ignore 'manual' retweets, i.e. messages starting with RT
if text.find("rt ") > -1:
continue
tweets_text.append( text )
# I added an if-else statement, but it's still having be the error message
if tweet['user']:
tweets_location.append( tweet['user']['location'] )
else:
tweets_location.append("")
except ValueError:
pass
答案 0 :(得分:2)
使用dict.get
。
if tweet.get('user'):
tweets_location.append(tweet['user'].get('location', ''))
else:
tweets_location.append("")
答案 1 :(得分:1)
您收到了KeyError。如果要检查密钥是否在字典中,请执行:
if 'user' in tweet:
tweets_location.append( tweet['user']['location'] )
或者你可以将它嵌入try ..except:
try:
tweets_location.append( tweet['user']['location'] )
except KeyError:
tweets_location.append('')
或者,您可以使用XrXrXr建议的dict的get方法。 get方法为您提供了一种提供默认值的便捷方式,即您可以在一行中完成所有操作:
tweets_location.append( tweet.get('user', '').get('location', '') )
如果'user'不是tweet中的键,则默认为空字符串;如果'location'不是tweet ['user']的键,则默认为空字符串
答案 2 :(得分:0)
通过在if语句中执行tweet['user']
,您假设密钥user
存在,这会引发KeyError
。您可以通过执行if 'user' in tweet
来测试密钥是否在dict中。或者,您可以处理类似于如何处理KeyError
ValueError
try:
....
try:
tweets_location.append( tweet['user']['location'] )
except KeyError:
tweets_location.append("")
except ValueError:
pass