如何检查是否存在扩展实体,是否存在曲折响应



我能够从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
        

我想从推文中解析media对象,但是所有推文中都不可用media_urlextended_entities。因此,如果我尝试这样获取:

tweet_record['media_url'] = tweet.extended_entities.media_url

它出错,因为extended_entities可能不存在一些推文中。

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

您在这里有几个选项,您可以检查键是否存在,或使用一些尝试/除外。

检查密钥是否存在:

您可以这样做,因为鞭打返回一个状态对象,该对象的作用类似于JSON文件或Python Dictionary,因此您本质上有一个键:值对。您应该能够使用(按照上述代码进行)

if 'extended_entities' in tweet:
    tweet_record['media_url'] = tweet.extended_entities.media_url

当然,反向也可能

if 'extended_entities' not in tweet:
    #whatever you want to do

这可能会导致问题,如果存在extended_entities,但是出于某种原因,媒体_URL却没有怎么办?而且,如果您想从中获得更多(没有一个状态对象,但是,我只是想在这里进行以后的证明!)看起来最好的

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用于访问对象的无效属性。当然,您可能想重新订购此功能以使其可读性。在我看来,这样做是Pythonic的,如果太多使用的话可能很难阅读。

查找此答案时,我提到了这个问题。如果您需要进一步的帮助,就可以为这种事情提供一些好主意。

希望会有所帮助。

另外,一个不错的选择是在if-Statement中使用hasattr(Object, name)

if hasattr(tweet, "extended_entities"):
# do whatever

相关内容

最新更新