防止 tqdm 在出错后打印任何内容

Preventing tqdm from printing anything after error

在 tqdm 循环中处理错误时,我希望错误消息是最后打印的内容。 MWE:

import tqdm
import sys

for i in tqdm.tqdm(range(10)):

    if i == 3:

        print('error')

        sys.exit(1)

当运行这样时,tqdm 仍会在“错误”消息后打印一个进度条。是否可以避免这种情况(以便“错误”是最后显示的内容)?

编辑:我实际上是从对 tqdm 一无所知的不同外部模块调用 sys.exit,并且我不想让 tqdm 对象具有全局变量。也许我要求太多了...

干杯。

是的。 调用 close() 并确保 leave 为 False。

参见:https://tqdm.github.io/docs/tqdm/#close

您可以将 tqdm 实例存储在变量中并手动更新它。

progress_bar = tqdm(total=10)
for i in range(10):
    progress_bar.update()
    
    do_stuff()

    if i ==3:
        progress_bar.close()
        print('error')
        sys.exit(1)

您可以使用 tqdm.trange 作为上下文管理器来消除手动更新的需要,但仍提供关闭它的方法。参见 https://github.com/tqdm/tqdm#description-and-additional-stats

请注意,如果您退出上下文管理器,它将 运行 其 'finally' 部分并关闭 tqdm 实例。