Twitter情感分析代码运行时触发NoneType不可迭代错误求助
Twitter情感分析代码TypeError问题修复
问题根源
触发TypeError: 'NoneType' object is not iterable的核心原因有两个:
get_tweets方法异常时返回None:当Tweepy调用出错(比如查询为空、API权限问题、网络错误),方法仅打印错误但未返回任何值,默认返回None。后续尝试迭代None就会抛出错误。- 未处理空查询输入:如果Tkinter输入框
txt.get()获取到空字符串,会导致Twitter API查询无效,触发Tweepy异常,进而让get_tweets返回None。
另外代码还存在其他小问题:
- main函数中计算中立推文占比的公式缺少减号:
len(tweets) (len( ntweets )+len( ptweets))应为len(tweets) - (len( ntweets )+len( ptweets)) - Tkinter的
clicked函数中,显示负面推文时存在控件赋值错误(用lbl.grid而非lb1.grid)
修复方案
1. 确保get_tweets始终返回列表
修改get_tweets方法,在异常分支返回空列表,避免返回None:
def get_tweets(self, query, count = 300): tweets = [] try: fetched_tweets = self.api.search_tweets(q = query, count = count) 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) return tweets except tweepy.errors.TweepyException as e: print("Error : " + str(e)) return tweets # 异常时返回空列表
2. 处理空查询输入
在clicked函数开头添加输入校验,避免空字符串查询:
def clicked(): query = txt.get().strip() if not query: # 显示提示信息 lbl = Label(window, text="请输入有效的查询关键词!", font=("Helvetica", 16), bg='lightblue') lbl.place(relx=0.5, rely=0.7, anchor=CENTER) return api = TwitterClient() tweets = api.get_tweets(query = query, count = 300) # 后续代码不变...
3. 修正计算错误
修复main函数中的中立占比公式:
print("Neutral tweets percentage: {} %".format(100*(len(tweets) - (len( ntweets )+len( ptweets)))/len(tweets)))
4. 修复Tkinter控件赋值错误
修正clicked函数中负面推文显示的代码:
resneg=("\n\nNegative tweets:") lb1= Label(window, text=resneg, bg='lightblue') rew+=1 lb1.grid(column=0, row=rew) # 改为lb1.grid for tweet in ntweets[:10]: resn=(tweet['text']) lb1 = Label(window, text=resn, bg='lightblue', wraplength=900) rew+=1 lb1.grid(column=0, row=rew) # 改为lb1.grid
额外优化
- 为Tkinter的Label添加
bg='lightblue',避免背景颜色不一致 - 为显示推文的Label添加
wraplength,避免文本超出窗口
内容的提问来源于stack exchange,提问作者Adarsh Agarwal
相关产品推荐
相关产品推荐

