打印一本空字典

时间:2014-03-02 21:04:32

标签: python

我正在尝试使用Twitter API,但有些推文会像空白标签一样返回空白。我该如何打印?或者至少是一条消息,它是空的。

这是我到目前为止所做的:

def get_tweets(q, count=100, result_type="recent"):
    result = search_tweets(q, count, result_type)
    following = set(t.friends.ids(screen_name=TWITTER_HANDLE)["ids"])
    for tweet in result['statuses']:
        try:
            print tweet
            print tweet['text']
            print str(tweet['user']['id'])
            print tweet['hashtags']
            #print 'user mentions ' + tweet['users_mentions'] + tweet['hashtags']
            time.sleep(30) # Sleep for 1 hour
        except TwitterHTTPError as e:
            print "error: ", e
            if "blocked" not in str(e).lower():
                quit()      

但我在

上收到错误
print tweet['hashtags']

这是错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 9, in get_tweets
KeyError: 'hashtags'

3 个答案:

答案 0 :(得分:3)

<强> dict.get()

您想使用get()函数。

来自python docs

get(key[, default]): 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.

示例

In [2]: foo = {'a': 1}

In [3]: foo['b']
...
KeyError: 'b'

In [4]: foo.get('b', "B not found")
Out[4]: 'B not found'

检查密钥中的成员资格

作为替代方案,您可以检查密钥是否存在,并有条件地报告错误。

if 'hashtags' in tweet.keys():
    #do stuff if the hashtag exists
else:
    #do error condition

您可以选择最适合您情况的那种。

您的代码

以下是您的代码与这些更改的相似之处。

def get_tweets(q, count=100, result_type="recent"):
    ...
    for tweet in result['statuses']:
        ...
        print tweet.get('hashtags', "")
        if 'user_mentions' in tweet.keys():
            print 'user mentions ' + 
                tweet.get['users_mentions'] +  
                tweet.get('hashtags', '')

答案 1 :(得分:3)

如前所述,您可以使用dict.get()来进行搜索。否则,您可以使用以下if-else块:

if 'hashtags' in tweet:
    print tweet['hashtags']
else:
    print "No hashtags"

答案 2 :(得分:2)

使用get方法,第一个参数是键,第二个是如果键不存在则返回的值:

print tweet.get('hashtags', None)