ZeroDivision错误:python中的float division`

2024-06-30 17:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

querytimes = "SELECT video_id, COUNT(src_ip) FROM video GROUP BY video_id ORDER BY COUNT(src_ip) DESC"
cur.execute (querytimes)
dltimes = cur.fetchall()
for row in dltimes:

    videoid = str(row [0])
    downloadtimes = int(str(row [1]))
    x.append(rank)
    rank = rank + 1 
    y.append(downloadtimes)
    v.append(videoid)


counter = dict(zip(v, y))
for n in xrange(1, max(counter.itervalues()) + 1):
    perc = 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter)
if perc:
   print '%.f%% videos have been downloaded %d times' % (perc, n)

这是我的密码。起初我从数据库中读取数据,然后将videoid和下载时间放入字典中,并进行一些计算,但我得到了以下错误:

perc = 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter) ZeroDivisionError: float division

有人能帮忙吗?


Tags: inidforifvideocountcounterrow
2条回答

检查counter是否为空-换句话说,如果dltimes中返回的值没有元素。我会在for循环中执行类似的操作:

if counter:
    perc = 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter)
else:
    perc = 0

或者,也有可能没有nb == n是真的值。在这种情况下:

s = sum(1 for nb in counter.itervalues() if nb == n)
if counter and s:
    perc = 100. / s / len(counter)
else:
    perc = 0

你检查过你的counter字典至少有一个值符合nb == n条件吗?在我看来,结果要么是你的sum,要么是你的len返回0。。。

看看这个:

>>> n = 3
>>> counter = {'a': 1}
>>> 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
>>> counter = {'a': 3}
>>> 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter) 
100.0

相关问题 更多 >