首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:为什么在函数中会出现"ZeroDivisionError: division by zero“?

Python:为什么在函数中会出现"ZeroDivisionError: division by zero“?
EN

Stack Overflow用户
提问于 2017-11-15 16:03:08
回答 3查看 2.6K关注 0票数 0

我的目标是统计文件中属于特定时区的tweet总数。我有以下函数(我用注释指出了函数末尾附近的故障区):

代码语言:javascript
复制
def readTweets(inFile, wordsName):    
words = []
lat = 0
long = 0
keyword = keywords(wordsName)
sents = keywordSentiment(wordsName)
value = 0
eastern = 0
central = 0
mountain = 0
pacific = 0
a = 0
b = 0
c = 0
d = 0
easternTweets = 0
centralTweets = 0
mountainTweets = 0
pacificTweets = 0

for line in inFile:
    entry = line.split()    

    for n in range(0, len(entry) - 1):
        entry[n] = entry[n].strip("[],!?#./-=+_@")
        if n > 4:   # n>4 because words begin on 5th index of list
            entry[n] = entry[n].lower()
            words.append(entry[n])

    lat = float(entry[0])
    long = float(entry[1])

    timezone = getTimeZone(lat, long)  
    if timezone == "eastern":
        easternTweets += 1
    if timezone == "central":
        centralTweets += 1
    if timezone == "mountain":
        mountainTweets += 1
    if timezone == "pacific":
        pacificTweets += 1

    for i in range(0, len(words)):
        for k in range(0, len(keyword)):
            if words[i] == keyword[k]:
                value = int(sents[k])
                if timezone == "eastern":
                    eastern += value
                    a += 1
                if timezone == "central":
                    central += value
                    b += 1
                if timezone == "mountain":
                    mountain += value
                    c += 1
                if timezone == "pacific":
                    pacific += value
                    d += 1

# the values of a,b,c,d are 0
easternTotal = eastern/a    # getting error 
centralTotal = central/b    # for 
mountainTotal = mountain/c  # these 
pacificTotal = pacific/d    # values

print("Total tweets per time zone:")
print("Eastern: %d" % easternTweets)
print("Central: %d" % centralTweets)
print("Mountain: %d" % mountainTweets)
print("Pacific: %d" % pacificTweets)

对于easternTotal和其他使用abcd进行除法的合计值,我得到了一个ZeroDivisionError: division by zero错误。

如果我打印abcd的值,它会显示0。我的问题是,为什么它们的值是0?abcd的值在if语句中不变吗?

EN

回答 3

Stack Overflow用户

发布于 2017-11-15 16:10:23

因此,唯一可能发生这种情况的原因是,递增a、b、c和d的代码永远不会到达。

这可能有几个原因:

  • inFile为空,因此整个for循环永远不会进入它的body
  • len(words)为0,因此for循环永远不会进入它的body
  • len(keywords)为0,所以for循环永远不会进入它的主体
  • timezone的值不是您为

测试的值

words最初为[],因此如果向其追加内容的循环从未运行,则其长度可以保持为0。

从这里,我们不可能看到其中的哪一个正在发生,但对于您来说,使用一些打印语句或诸如此类的语句应该非常容易。

票数 0
EN

Stack Overflow用户

发布于 2017-11-15 16:16:35

eastern除以0。你可以通过这样做来避免它

代码语言:javascript
复制
easternTotal = eastern/a if a > 0 else eastern
票数 0
EN

Stack Overflow用户

发布于 2017-11-15 16:39:50

因为您设置了a,b,c,d=0;当readTweets(inFile,wordsName)没有得到任何数据时,“data /a”可能会导致“data/0”。

因此,请确保您的readTweets()确实首先获得了数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47302189

复制
相关文章

相似问题

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