防止错误后tqdm打印任何内容

问题描述

在处理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

请注意,如果您脱离上下文管理器,它将运行其“最终”部分并关闭tqdm实例。