2014-03-02 169 views
0

我正在嘗試使用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' 
+0

'如果鳴叫 '井號標籤':打印鳴叫[ '主題標籤']'' – hjpotter92

+3

time.sleep(30)' - 這不睡一個小時,但是30秒。 –

+0

「或者至少,這是一個消息,它是空的。」 - @karolyhorvath先閱讀問題,然後評論 –

回答

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', '') 
2

使用get方法,第一個參數是鍵,第二個是如果鍵不存在則返回的值:

print tweet.get('hashtags', None) 
3

正如已經回答的那樣,您可以使用dict.get()調用進行搜索。否則,你可以使用下面的if-else塊:

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