Loop Break Break TQDM

Следующий простой код использует tqdm для отображения индикатора выполнения во время итерации по циклу:

import tqdm
for f in tqdm.tqdm(range(100000000)):
  if f > 100000000/4:
    break

Это терпит неудачу, когда разрыв выполнен:

$ python test.py 
 24%|████▎ | 24425076/100000000 [00:03<00:11, 6550673.18it/s]
Exception KeyError: KeyError(<weakref at 0x7fb8799f1158; to 'tqdm' at 0x7fb8799de190>,) in  ignored

Я использую Python v2.7.6 и tqdm v4.32.1:

$ python --version
Python 2.7.6
$ python -m tqdm --version
4.23.1

Я искал подобные ошибки в Интернете без положительного результата.

1 ответ

Оказывается, итератор tqdm должен быть закрыт вручную, когда он прерван:

import tqdm
iterator = tqdm.tqdm(range(100000000))
for f in iterator:
  if f > 100000000/4:
    iterator.close()
    break

Это выполняется без проблем.

Другие вопросы по тегам