为何'Status'对象不可下标?如何修复Tweepy代码报错?
问题:Tweepy中'Status'对象不可下标的原因及修复方案
问题重现
你尝试用以下代码获取用户推文:
def get_all_tweets(screen_name): api = tweepy.API(auth) # 初始化列表存储推文 alltweets = [] # 请求最新的200条推文(API单次请求最大限制) new_tweets = api.user_timeline(screen_name = screen_name, count=200) # 保存最新推文 alltweets.extend(new_tweets) # 保存最旧推文ID减1,用于后续分页请求 oldest = alltweets[-1]["id"] - 1
运行时触发错误:
<ipython-input-7-2ce84a05eaae> in get_all_tweets(screen_name) 110 111 #save the id of the oldest tweet less one --> 112 oldest = alltweets[-1]["id"] - 1 113 114 TypeError: 'Status' object is not subscriptable
原因分析
Tweepy的api.user_timeline()返回的是Status类的实例列表,不是字典类型。你用["id"]这种字典下标访问的方式操作Status对象,自然会触发“不可下标”的错误——只有字典、列表这类可迭代容器支持下标访问,类实例需要用属性访问语法。
修复方案
将下标访问改为属性访问即可:
# 替换原来的错误代码行 oldest = alltweets[-1].id - 1
如果需要字符串类型的ID(避免大数精度丢失问题),可以改用:
oldest = int(alltweets[-1].id_str) - 1
额外建议:如果目标用户无推文或请求失败,alltweets会是空列表,直接访问alltweets[-1]会触发索引错误,建议提前做检查:
if alltweets: oldest = alltweets[-1].id - 1 else: # 处理无推文/请求失败的情况 oldest = None
内容的提问来源于stack exchange,提问作者aya zouaoui
相关产品推荐
相关产品推荐

