Key存在时出现KeyError
Posted
技术标签:
【中文标题】Key存在时出现KeyError【英文标题】:KeyError when Key exists 【发布时间】:2014-09-09 01:36:29 【问题描述】:使用python和twitter api获取tweet对象。
我有一个包含推文的文件(tweetfile = 我计算机上的 .txt 文件),我正在尝试遍历对象以获取文本。我用 tweetObj.keys() 检查了 twitter 对象以查看键和“文本”;但是,当我尝试使用 tweetObj['text'] 获取单个文本时,我得到 KeyError: 'text'
代码:
for line in tweetfile:
tweetObj = json.loads(line)
keys = tweetObj.keys()
print keys
tweet = tweetObj['text']
print tweet
下面是输出:
[u'contributors', u'truncated', u'text', u'in_reply_to_status_id', u'id', u'favorite_count', u'source', u'retweeted', u'coordinates', u'entities', u'in_reply_to_screen_name', u'id_str', u'retweet_count', u'in_reply_to_user_id', u'favorited', u'user', u'geo', u'in_reply_to_user_id_str', u'possibly_sensitive', u'lang', u'created_at', u'filter_level', u'in_reply_to_status_id_str', u'place']
@awe5sauce my dad was like "so u wanna be in a relationship with a 'big dumb idiot'" nd i was like yah shes the bae u feel lmao
[u'delete']
Traceback (most recent call last):
File "C:\apps\droid\a1\tweets.py", line 34, in <module>
main()
File "C:\apps\droid\a1\tweets.py", line 28, in main
tweet = tweetObj['text']
KeyError: 'text'
我不确定如何处理,因为它看起来像是在打印一条推文。问题是为什么在密钥存在并且似乎返回一个值但并非针对所有实例的情况下会发生这种情况,我如何将其更正到我可以使用该密钥访问所有行的值的位置?
【问题讨论】:
看起来字典键是 unicode。你试过 tweetObj[u'text'] 吗? 做到了,加上使用 tweet.encode('utf-8')。仍然不确定为什么有人会回来。 【参考方案1】:在循环中创建了 2 个字典,每行一个。第一个有text
,第二个只有一个'delete'
键。它没有'text'
键。因此出现错误消息。
改成:
for line in tweetfile:
tweetObj = json.loads(line)
keys = tweetObj.keys()
print keys
if 'text' in tweetObj:
print tweetObj['text']
else:
print 'This does not have a text entry'
请注意,如果您只对包含 text
的行感兴趣,您可能需要使用
[ json.loads(l)['text'] for l in tweetfile if 'text' in json.loads(l) ]
或
'\n'.join([ json.loads(l)['text'] for l in tweetfile if 'text' in json.loads(l) ])
甚至更好
[ json.loads(l).get('text') for l in tweetfile]
【讨论】:
啊!应该仔细看看。谢谢。 这是荒谬的推理。创建了2个字典?怎么样?以上是关于Key存在时出现KeyError的主要内容,如果未能解决你的问题,请参考以下文章
git push时出现Permission denied(publickey)的解决
当我使用字典`set value for key`时出现此错误
git clone时出现Permission denied (public key)问题解决
将 Key Vault 证书(自签名)部署到 Web 应用程序时出现“错误请求”错误或“NoRegisteredProviderFound”