2013-09-10 42 views
2

的StackOverflowTweepy Python代碼返回在「媒體」實體KeyError異常時鳴叫不包含圖像

的喜人

我是比較新的Tweepy/Twitter的API和我有得到它返回的URL對圖像中的幾個問題。

基本上,我編寫了一段代碼,用於搜索特定hashtag的推文,然後返回tweets中存在的圖像URL實體。但是,當我發回的推文沒有任何媒體時,我遇到了一個問題。如下錯誤:

Traceback (most recent call last): 
File "./tweepyTest.py", line 18, in <module> 
for image in tweet.entities['media']: 
KeyError: 'media' 

下面是我的代碼:

for tweet in tweepy.Cursor(api.search,q="#hashtag",count=5,include_entities=True).items(5): 
     #print tweet.text 
     for image in tweet.entities['media']: 
      print image['media_url'] 

我猜我需要包住for循環在某種if語句,但是我努力讓我圍繞如何頭。

任何幫助將不勝感激。

編輯: 我想我可能已經找到了解決辦法,但我不知道它是特別優雅.....使用try /除外。

for tweet in tweepy.Cursor(api.search,q="#hashtag",count=5,include_entities=True).items(5): 
    #print tweet.text 
    try: 
      for image in tweet.entities['media']: 
        print image['media_url'] 
    except KeyError: 
      pass 

回答

3

你可以檢查爲重點的存在:

for tweet in tweepy.Cursor(api.search,q="#hashtag",count=5,include_entities=True).items(5): 
    #print tweet.text 
    if 'media' in tweet.entities: 
     for image in tweet.entities['media']: 
      print image['media_url'] 

或者得到一個空列表,如果沒有這樣的關鍵:

for tweet in tweepy.Cursor(api.search,q="#hashtag",count=5,include_entities=True).items(5): 
    #print tweet.text 
    for image in tweet.entities.get('media', []): 
     print image['media_url'] 
+0

你能解釋一下如何'tweet.entities .get('media',[])'工作?有點困惑它和'tweet.entities ['media']' – Krishh

+2

@KrishanuKonar - 'tweet.entities'是一本字典。字典有[get()方法](https://docs.python.org/3/library/stdtypes.html#dict.get),它返回所請求的鍵的值(如果存在),或者返回給定的默認值if關鍵不存在。所以'tweet.entities.get('media',[])'返回媒體項目列表,如果它存在的話,或者是一個空列表,如果它不存在的話。 'tweet.entities ['media']'如果'media'鍵存在,就可以正常工作,但如果不存在,會引發'KeyError'異常。 – Blair