Python 如何检查tweepy响应中是否存在扩展实体

Python 如何检查tweepy响应中是否存在扩展实体,python,twitter,tweepy,Python,Twitter,Tweepy,我可以从tweet中获取不同的tweet参数 keyword = tweepy.Cursor(api.search, val,tweet_mode='extended',lang='en').items(2) tweetdone = 0 all_tweet = [] for tweet in keyword: tweet_record = {} tweet_record['tweet.text'] = tweet.full_tex

我可以从tweet中获取不同的tweet参数

    keyword = tweepy.Cursor(api.search, val,tweet_mode='extended',lang='en').items(2)
    tweetdone = 0
    all_tweet = []
    for tweet in keyword:
        tweet_record = {} 
        tweet_record['tweet.text'] = tweet.full_text
        tweet_record['tweet.user.name'] = tweet.user.name
        tweet_record['tweet.user.location'] = tweet.user.location
        tweet_record['tweet.user.verified'] = tweet.user.verified
        tweet_record['tweet.lang'] = tweet.lang
        tweet_record['tweet.created_at'] = tweet.created_at
        tweet_record['tweet.user'] = tweet.user
        tweet_record['tweet.retweet_count'] = tweet.retweet_count
        tweet_record['tweet.favorite_count'] = tweet.favorite_count
我的问题是。我想解析tweet中的
媒体
对象。但并非所有推文中都有媒体url所在的扩展实体。 所以如果我试着这样取它

tweet_record['media_url'] = tweet.extended_entities.media_url
它给出了错误,因为扩展实体可能不会出现在少数tweet中


如何处理此问题并正确获取媒体内容?

这里有几个选项,您可以检查密钥是否存在,或者使用一些try/excepts

检查密钥是否存在:

之所以可以这样做,是因为tweepy返回一个status对象,其作用类似于json文件或python字典,因此实际上您有一个key:value对。您应该能够使用(按照上述代码)

当然,反过来也是可能的

if 'extended_entities' not in tweet:
    #whatever you want to do
但这可能会导致问题,如果扩展实体存在,但由于某种原因,媒体url不存在,该怎么办?如果您想从中获得更多(没有状态对象,但我只是想在这里证明未来!),您将不得不执行长的或多嵌套的if语句,这看起来不是最好的

if 'extended_entities' in tweet:
    if 'media_url' in tweet['extended_entities']
        #etc
因此,除了……,

try:
    tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
    #etc
这意味着当找不到特定元素时,程序不会出错。AttributeError用于访问对象的无效属性。当然,为了便于阅读,您可能需要重新排序。但是请记住,在我看来,当你这么做的时候,如果用得太多,阅读起来可能有点困难

我在查找有关此答案的信息时提到。如果你需要进一步的帮助,给你一些关于这类事情的好主意

希望有帮助

try:
    tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
    #etc