首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZeroDivisionError: python中的float division`

ZeroDivisionError: python中的float division`
EN

Stack Overflow用户
提问于 2011-12-06 19:01:25
回答 2查看 7K关注 0票数 0
代码语言:javascript
复制
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

有谁能帮上忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-06 19:06:17

您是否检查过counter字典中至少有一个值与nb == n条件匹配?在我看来,结果就是你的sum或者你的len返回0

看看这个:

代码语言:javascript
复制
>>> 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
票数 3
EN

Stack Overflow用户

发布于 2011-12-06 19:07:26

检查counter是否为空-换句话说,dltimes中返回的值是否没有元素。我会在for循环中这样做:

代码语言:javascript
复制
if counter:
    perc = 100. / sum(1 for nb in counter.itervalues() if nb == n) / len(counter)
else:
    perc = 0

或者,也有可能在nb == n为True的地方没有值。在这种情况下:

代码语言:javascript
复制
s = sum(1 for nb in counter.itervalues() if nb == n)
if counter and s:
    perc = 100. / s / len(counter)
else:
    perc = 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8398828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档