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

Enumerate循环中TQDM进度条无法达到100%问题求助

问题原因

进度条无法走满的核心问题是进度更新和终止判断的执行顺序错误,加上终止条件阈值设置不当:

  • enumerate从0开始计数,你设置的终止条件为i > numTweets,实际会收集到numTweets + 1条数据,且进度更新会多执行2次,和预设的total值不匹配
  • 你先执行进度更新,再做终止判断,如果爬虫迭代过程中因为网络波动、接口限流、目标内容不足等原因提前终止,就会出现进度没有走到预设值的情况
  • 循环结束后没有手动关闭进度条,tqdm的输出缓冲可能会导致最终进度没有刷新到100%
修复方案

调整判断顺序、修正终止阈值,循环结束后手动关闭进度条即可:

if __name__ == '__main__':
    data = []
    numTweets = 50
    pbar = tqdm(total=numTweets,
                desc='Collecting Tweets')
    for i, tweet in enumerate(sntwitter.TwitterSearchScraper('COVID Vaccine since:2021-01-01 until:2021-05-31').get_items()):
        # 先判断是否达到采集数量上限,达到就直接终止
        if i >= numTweets:
            break
        # 再更新进度、处理数据
        pbar.update(n=1)
        data.append([tweet.date, tweet.id, tweet.content])
    # 确认是可采集内容不足导致进度不满时,可取消下一行注释强制补满进度
    # pbar.update(pbar.total - pbar.n)
    # 手动关闭进度条,刷新最终状态
    pbar.close()
更简便的写法

你也可以直接把迭代器传入tqdm,不需要手动调用update方法,避免顺序写错的问题:

if __name__ == '__main__':
    data = []
    numTweets = 50
    scraper = sntwitter.TwitterSearchScraper('COVID Vaccine since:2021-01-01 until:2021-05-31').get_items()
    for i, tweet in enumerate(tqdm(scraper, total=numTweets, desc='Collecting Tweets')):
        if i >= numTweets:
            break
        data.append([tweet.date, tweet.id, tweet.content])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:45:04