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没返回数据,还是数据整理出了问题。
二、代码里的两个致命小错误
列表减法导致的隐性错误:你原来计算中性推文的代码
len(tweets - ntweets - ptweets)是完全错误的,Python列表不支持减法运算,这会直接触发TypeError——但你说没报错,大概率是因为tweets为空,程序还没走到这一步就因为除以0错误终止了,只是你的环境没显示错误(比如某些IDE的输出设置问题)。硬编码的查询关键词:
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
相关产品推荐
相关产品推荐

