You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python情感分析代码无输出无报错(Exit code 0)技术求助

解决你的Twitter情感分析代码无输出问题

作为新手遇到这种无反馈的情况确实头疼,咱们一步步拆解问题,找到根源:

一、先定位程序卡在哪一步

首先,你的代码退出码为0说明程序正常执行完毕,但没输出大概率是某个关键步骤没产生数据,或者中间有隐性错误被忽略了。先给代码加几个调试打印,看看程序走到哪了:

修改后的关键部分代码:

class TwitterClient(object):
    def __init__(self):
        consumer_key = "ConsumerKey"
        consumer_secret = "ConsumerSecret"
        access_token = "AccessToken"
        access_token_secret = "AccessTokenSecret"
        try:
            self.auth = OAuthHandler(consumer_key, consumer_secret)
            self.auth.set_access_token(access_token, access_token_secret)
            self.api = tweepy.API(self.auth)
            print("✅ 认证成功!")  # 新增:确认认证是否通过
        except:
            print("❌ 认证失败!")

    def get_tweets(self, query, count=10):
        tweets = []
        try:
            # 这里把硬编码的"Microsoft"改成传入的query,不然调用传参没用
            fetched_tweets = self.api.search(q=query, count=count)
            print(f"📥 从API获取到 {len(fetched_tweets)} 条推文")  # 新增:看是否拿到数据
            for tweet in fetched_tweets:
                parsed_tweet = {}
                parsed_tweet['text'] = tweet.text
                parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text)
                if tweet.retweet_count > 0:
                    if parsed_tweet not in tweets:
                        tweets.append(parsed_tweet)
                else:
                    tweets.append(parsed_tweet)
            print(f"📝 最终整理出 {len(tweets)} 条有效推文")  # 新增:看整理后的数据量
            return tweets
        except tweepy.TweepError as e:
            print("❌ API请求错误:" + str(e))

def main():
    api = TwitterClient()
    tweets = api.get_tweets(query='Microsoft', count=50)
    print(f"📊 主函数收到 {len(tweets)} 条推文")  # 新增:确认数据是否传到主函数
    if not tweets:
        print("⚠️ 没有任何推文数据,无法计算情感占比!")
        return  # 避免后续除以0错误

    # 计算各类情感占比
    ptweets = [tweet for tweet in tweets if tweet['sentiment'] == 'positive']
    print(f"正面推文占比: {100 * len(ptweets) / len(tweets):.2f} %")
    
    ntweets = [tweet for tweet in tweets if tweet['sentiment'] == 'negative']
    print(f"负面推文占比: {100 * len(ntweets) / len(tweets):.2f} %")
    
    # 这里修复列表减法的错误!列表不能用-运算
    neutral_count = len(tweets) - len(ptweets) - len(ntweets)
    print(f"中性推文占比: {100 * neutral_count / len(tweets):.2f} %")

    # 后面的推文打印部分不变...

运行修改后的代码,看输出的调试信息,就能知道是认证失败、API没返回数据,还是数据整理出了问题。

二、代码里的两个致命小错误

  1. 列表减法导致的隐性错误:你原来计算中性推文的代码len(tweets - ntweets - ptweets)是完全错误的,Python列表不支持减法运算,这会直接触发TypeError——但你说没报错,大概率是因为tweets为空,程序还没走到这一步就因为除以0错误终止了,只是你的环境没显示错误(比如某些IDE的输出设置问题)。

  2. 硬编码的查询关键词:get_tweets方法里写死了q="Microsoft",导致你调用时传的query='Microsoft'根本没用,虽然这次关键词一样,但如果以后换关键词就会出问题,已经在上面的代码里修复了。

三、API访问的常见坑

如果调试后发现从API获取到 0 条推文,那大概率是Twitter API的权限问题:

  • 现在免费账号默认不能用搜索接口:Twitter的v1.1 API搜索功能需要申请「Elevated Access」(免费,但需要在开发者后台提交申请,一般很快通过)。
  • tweepy版本太旧:旧版tweepy可能不兼容最新的API规则,执行pip install --upgrade tweepy升级到最新版。
  • 改用v2 API:Twitter现在推荐使用v2版本的API,你可以换成tweepy.Client来获取推文(需要在开发者后台生成Bearer Token,而不是原来的consumer key),示例代码如下:
# 替换原来的get_tweets方法为v2版本
def get_tweets(self, query, count=10):
    tweets = []
    try:
        # 用Bearer Token初始化v2客户端
        client = tweepy.Client(bearer_token="你的Bearer Token")
        # 搜索最近的推文
        response = client.search_recent_tweets(query=query, max_results=count)
        if response.data:
            for tweet in response.data:
                parsed_tweet = {}
                parsed_tweet['text'] = tweet.text
                parsed_tweet['sentiment'] = self.get_tweet_sentiment(tweet.text)
                tweets.append(parsed_tweet)
        return tweets
    except tweepy.TweepError as e:
        print("❌ API请求错误:" + str(e))

四、最后检查正则表达式

你的clean_tweet方法里的正则有多余空格,会导致清洗不彻底,改成下面的版本:

def clean_tweet(self, tweet):
    # 去掉多余的空格,正则匹配更准确
    return ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)", " ", tweet).split())

按照上面的步骤排查,应该就能解决无输出的问题了!

内容的提问来源于stack exchange,提问作者JT2112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:54:16