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

使用Tweepy statuses_lookup查询推文时如何处理NoneType错误?

我来帮你搞定这个问题!你遇到的TypeError根源很明确:你的lookup_tweets函数在捕获到异常时直接pass,没有返回已经收集到的推文列表,导致results变成了None,后续遍历它自然会报错。另外,其实statuses_lookup本身会自动跳过已删除/不存在的推文ID,不会返回None类型的元素,所以你不需要过滤单个status,关键是修复函数的异常处理逻辑。

修复后的完整代码

import tweepy
import json
import pandas as pd

def lookup_tweets(tweet_IDs, api):
    full_tweets = []
    tweet_count = len(tweet_IDs)
    # 按Twitter API限制的100条为一批次拆分ID列表
    for i in range((tweet_count // 100) + 1):
        end_loc = min((i + 1) * 100, tweet_count)
        current_batch = tweet_IDs[i * 100:end_loc]
        try:
            # 调用接口,自动忽略已删除/不存在的推文ID
            batch_tweets = api.statuses_lookup(current_batch, tweet_mode='extended')
            full_tweets.extend(batch_tweets)
        except tweepy.TweepException as e:
            # 打印错误信息方便排查,不中断整个收集流程
            print(f"处理第{i+1}批次时出错: {str(e)}")
            # 直接跳过当前批次,继续处理下一批
            continue
    # 无论是否遇到异常,都返回已收集到的推文列表(空列表也不会触发None错误)
    return full_tweets

results = lookup_tweets(good_tweet_ids_test, api)
# 先判断是否有有效推文,再执行后续序列化操作
if results:
    temp = json.dumps([status._json for status in results])
    newdf = pd.read_json(temp, orient='records')
    newdf.to_json('tweepy_tweets.json')
    print(f"成功保存{len(results)}条有效推文")
else:
    print("没有获取到任何有效推文")

关键修改点说明

  1. 缩小异常处理范围:把try-except从包裹整个循环改成包裹单个批次的查询。这样某个批次触发异常(比如API速率限制、网络问题)时,只会跳过该批次,不会导致整个函数返回None。
  2. 捕获具体异常:放弃裸except,改用tweepy.TweepException捕获API相关的错误,既能避免误捕获其他类型的错误(比如语法错误),还能打印错误信息帮你排查问题。
  3. 确保函数始终返回列表:函数最后一定会返回full_tweets列表——哪怕没有收集到任何推文,返回的也是空列表,绝不会是None,彻底解决遍历None的错误。
  4. 添加空值判断:在处理结果前先检查results是否为空,避免做无用的序列化操作,还能给你明确的提示。

补充小知识

api.statuses_lookup本身就会自动过滤无效ID:如果你传入的ID列表里有已删除、私密或不存在的推文,它只会返回那些存在的推文对象,不会包含None元素。比如你传100个ID,其中30个无效,接口会直接返回70个有效推文组成的列表,你完全不用手动过滤单个status。

这样修改后,你的代码就能稳定运行,自动跳过无效批次和已删除推文,顺利收集并保存有效数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:03:32