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

含continue语句的for循环中tqdm进度条不显示的原因及解决

tqdm进度条在含continue的循环中不显示的问题解决

问题原因

tqdm的进度条依靠终端光标位置控制实现——它会在同一行不断覆盖旧内容展示进度。当循环中有print()时,print()会输出换行符,将光标移至下一行,tqdm会自动在新行重新绘制进度条;但在前5次迭代执行continue跳过print()时,没有触发换行操作,且tqdm的默认更新逻辑依赖输出动作触发终端刷新,导致进度条的更新被终端缓冲,无法及时显示。

另外,tqdm默认将进度条输出到stderr流,而print()输出到stdout流,两个流的刷新时机不同,没有print()的情况下,stderr的进度条更新可能不会被立即渲染。

解决方法

方法1:手动刷新进度条

将tqdm实例化,在每次迭代(包括执行continue的情况)中手动调用refresh()强制刷新进度条:

import time
from tqdm import tqdm

# 实例化进度条对象
pbar = tqdm(range(10))
for i in pbar:
    time.sleep(1)
    if i < 5:
        # 强制刷新进度条
        pbar.refresh()
        continue
    print(' '*5 + str(i))

方法2:让tqdm和print使用同一输出流

将tqdm的输出流设置为stdout(和print()一致),这样tqdm会自动处理进度条和打印内容的显示:

import time
import sys
from tqdm import tqdm

for i in tqdm(range(10), file=sys.stdout):
    time.sleep(1)
    if i < 5:
        continue
    print(' '*5 + str(i))

方法3:调整tqdm的更新间隔

设置mininterval=0,让tqdm忽略最小更新间隔,立即渲染进度条:

import time
from tqdm import tqdm

for i in tqdm(range(10), mininterval=0):
    time.sleep(1)
    if i < 5:
        continue
    print(' '*5 + str(i))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:15:09