Python Progress Bar ValueError: Value out of range
Python Progress Bar ValueError: Value out of range
我的进度条达到 100% 然后抛出错误
from progressbar import Percentage, ProgressBar,Bar,ETA
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()]).start()
for i,row in enumerate(cursor):
'''
do some work here
'''
pbar.update(i)
这是我得到的
Traceback (most recent call last):=========================] 100% ETA: 0:00:00
File "X:\src\dbtest\PymssqlCheck.py", line 27, in <module>
fiddler.getRows(condetails, dbdetails, 'compliance', 'doctable', '*', '1000')
File "X:\src\utilities\fiddler.py", line 45, in getRows
pbar.update(i)
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 271, in update
raise ValueError('Value out of range')
ValueError: Value out of range
为什么到了100%就失败了?我正在使用
https://github.com/niltonvolpato/python-progressbar
我什至试过
i=0
for row in cursor:
''' do some work here '''
if i < numrows:
pbar.update(i)
i=i+1
但我仍然得到同样的错误
编辑
我尝试了 Tomasz Jakub Rup 的回答
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()])
for row in pbar(cursor):
''' do some work here '''
我得到
File "X:\fiddler.py", line 41, in getRows
for row in pbar(cursor):
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 180, in __next__
if self.start_time is None: self.start()
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 311, in start
self.update(0)
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 283, in update
self.fd.write(self._format_line() + '\r')
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 243, in _format_line
widgets = ''.join(self._format_widgets())
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 223, in _format_widgets
widget = format_updatable(widget, self)
File "X:\Anaconda2\lib\site-packages\progressbar\widgets.py", line 38, in format_updatable
if hasattr(updatable, 'update'): return updatable.update(pbar)
File "X:\Anaconda2\lib\site-packages\progressbar\widgets.py", line 184, in update
return '%3d%%' % pbar.percentage()
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 208, in percentage
return self.currval * 100.0 / self.maxval
TypeError: unsupported operand type(s) for /: 'float' and 'classobj'
知道为什么吗?
因为进度条默认满了100。如果你有 N 个步骤,你应该指定一个 maxval=N
。
例如:
from progressbar import Percentage, ProgressBar,Bar,ETA
N = 300
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ', Percentage(), ' ', ETA()],
maxval=N).start()
for i in range(N+1):
pbar.update(i)
尝试:
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()])
for row in pbar(cursor.fetchall()):
''' do some work here '''
在这种情况下您不需要更新 pbar
也不需要开始和完成 pbar
。
David 和 Tomasz,你们两个都非常接近。有效的解决方案是
pbar = ProgressBar(widgets=[Bar('>', '[', ']'), ' ',
Percentage(), ' ',
ETA()],maxval=someMaxValue)
for row in pbar(cursor):
''' do some work '''
progress = ProgressBar(maxval=my.objects.count() or None).start() 为我修复
参考:https://github.com/niltonvolpato/python-progressbar/issues/36
我的进度条达到 100% 然后抛出错误
from progressbar import Percentage, ProgressBar,Bar,ETA
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()]).start()
for i,row in enumerate(cursor):
'''
do some work here
'''
pbar.update(i)
这是我得到的
Traceback (most recent call last):=========================] 100% ETA: 0:00:00
File "X:\src\dbtest\PymssqlCheck.py", line 27, in <module>
fiddler.getRows(condetails, dbdetails, 'compliance', 'doctable', '*', '1000')
File "X:\src\utilities\fiddler.py", line 45, in getRows
pbar.update(i)
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 271, in update
raise ValueError('Value out of range')
ValueError: Value out of range
为什么到了100%就失败了?我正在使用
https://github.com/niltonvolpato/python-progressbar
我什至试过
i=0
for row in cursor:
''' do some work here '''
if i < numrows:
pbar.update(i)
i=i+1
但我仍然得到同样的错误
编辑
我尝试了 Tomasz Jakub Rup 的回答
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()])
for row in pbar(cursor):
''' do some work here '''
我得到
File "X:\fiddler.py", line 41, in getRows
for row in pbar(cursor):
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 180, in __next__
if self.start_time is None: self.start()
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 311, in start
self.update(0)
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 283, in update
self.fd.write(self._format_line() + '\r')
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 243, in _format_line
widgets = ''.join(self._format_widgets())
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 223, in _format_widgets
widget = format_updatable(widget, self)
File "X:\Anaconda2\lib\site-packages\progressbar\widgets.py", line 38, in format_updatable
if hasattr(updatable, 'update'): return updatable.update(pbar)
File "X:\Anaconda2\lib\site-packages\progressbar\widgets.py", line 184, in update
return '%3d%%' % pbar.percentage()
File "X:\Anaconda2\lib\site-packages\progressbar\__init__.py", line 208, in percentage
return self.currval * 100.0 / self.maxval
TypeError: unsupported operand type(s) for /: 'float' and 'classobj'
知道为什么吗?
因为进度条默认满了100。如果你有 N 个步骤,你应该指定一个 maxval=N
。
例如:
from progressbar import Percentage, ProgressBar,Bar,ETA
N = 300
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ', Percentage(), ' ', ETA()],
maxval=N).start()
for i in range(N+1):
pbar.update(i)
尝试:
pbar = ProgressBar(widgets=[Bar('=', '[', ']'), ' ',
Percentage(), ' ',
ETA()])
for row in pbar(cursor.fetchall()):
''' do some work here '''
在这种情况下您不需要更新 pbar
也不需要开始和完成 pbar
。
David 和 Tomasz,你们两个都非常接近。有效的解决方案是
pbar = ProgressBar(widgets=[Bar('>', '[', ']'), ' ',
Percentage(), ' ',
ETA()],maxval=someMaxValue)
for row in pbar(cursor):
''' do some work '''
progress = ProgressBar(maxval=my.objects.count() or None).start() 为我修复
参考:https://github.com/niltonvolpato/python-progressbar/issues/36