【问题标题】:ZeroDivisionError , but I can't find the errorZeroDivisionError ,但我找不到错误
【发布时间】:2016-10-26 23:55:19
【问题描述】:

我遇到了一个小错误,但我找不到它。我的目的是比较包含这些单词的文本文件。

secondly
pardon
woods
secondly

我编写了这样的脚本来比较这两个值:

secondly, pardon
secondly, woods
secondly, secondly
pardon, woods
pardon, secondly
woods, secondly

我的代码执行以下操作:

1) 如果单词相同,则得分为 1,否则为 gensim 向量模型计算的得分 2) 有一个计数器,当第一个 for 循环移动到下一个字时,计数器将复位。 eg, 其次, pardon > 其次, woods > 其次, 其次(此时计数为3)

代码

from __future__ import division
import gensim


textfile = 'businessCleanTxtUniqueWords'
model = gensim.models.Word2Vec.load("businessSG")
count = 0  # keep track of counter
score = 0
avgScore = 0
SentenceScore = 0
externalCount = 0
totalAverageScore = 0

with open(textfile, 'r+') as f1:

    words_list = f1.readlines()

    for each_word in words_list:
        word = each_word.strip()

        for each_word2 in words_list[words_list.index(each_word) + 1:]:
            count = count + 1

            try:
                word2 = each_word2.strip()
                print(word, word2)
                # if words are the same
                if (word == word2):
                    score = 1
                else:
                    score = model.similarity(word,word2) # when words are not the same
            # if word is not in vector model
            except KeyError:
                score = 0
            # to keep track of the score
            SentenceScore=SentenceScore + score

            print("the score is: " + str(score))
            print("the count is: " + str(count))
        # average score
        avgScore = round(SentenceScore / count,5)

        print("the avg score: " + str(SentenceScore) + '/' + str(count) + '=' + str(avgScore))
        # reset counter and sentence score
        count = 0
        SentenceScore = 0

错误信息:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/Complete2/Complete/TrainedTedModel/LatestJR.py", line 41, in <module>
    avgScore = round(SentenceScore / count,5)
ZeroDivisionError: division by zero
('secondly', 'pardon')
the score is: 0.180233083443
the count is: 1
('secondly', 'woods')
the score is: 0.181432347816
the count is: 2
('secondly', 'secondly')
the score is: 1
the count is: 3
the avg score: 1.36166543126/3=0.45389
('pardon', 'woods')
the score is: 0.405021005657
the count is: 1
('pardon', 'secondly')
the score is: 0.180233083443
the count is: 2
the avg score: 0.5852540891/2=0.29263
('woods', 'secondly')
the score is: 0.181432347816
the count is: 1
the avg score: 0.181432347816/1=0.18143

我已将“from __future__ import division”包含在该部门中,但似乎无法修复它

我的文件可以在以下链接中找到:

Gensim 模型:

https://entuedu-my.sharepoint.com/personal/jseng001_e_ntu_edu_sg/_layouts/15/guestaccess.aspx?guestaccesstoken=BlORQpsmI6RMIja55I%2bKO9oF456w5tBLR43XZdVCQIA%3d&docid=00459c024d33d48638508dd331cf73144&rev=1&expiration=2016-11-25T23%3a56%3a48.000Z

文本文件:

https://entuedu-my.sharepoint.com/personal/jseng001_e_ntu_edu_sg/_layouts/15/guestaccess.aspx?guestaccesstoken=7%2b8Nkm9BySPFR0zqD%2fdgUcYOaXREG3%2fycALnMFcv59A%3d&docid=08158c442c3f74970bc8090f253b499f8&rev=1&expiration=2016-11-25T23%3a56%3a01.000Z

谢谢。

【问题讨论】:

  • count 可能为零,因为您的第一个 words_list[words_list.index(each_word) + 1:] 可能为空。
  • 嗨 kichik,我不太明白。你能解释一下吗?谢谢
  • 您是否彻底检查过您的错误?它应该给出行号和错误代码的 sn-p。
  • 嗨叶子,这是确切的错误消息。我是 python 新手,不知道如何调试好。

标签: python list python-2.7 divide-by-zero


【解决方案1】:

这是因为第一个for 循环已到达最后一个单词,第二个for 循环将不会执行,因此count 等于零(在最后一次迭代中重置为零)。只需将第一个for 循环更改为忽略最后一个单词(因为没有必要):

for each_word in words_list[:-1]:

【讨论】:

  • 非常感谢。你是对的,这就是问题所在。再次感谢。
【解决方案2】:

出错的那一行直接在错误信息中说明:

Traceback (most recent call last):
  File "C:/Users/User/Desktop/Complete2/Complete/TrainedTedModel/LatestJR.py", line 41, in <module>
    avgScore = round(SentenceScore / count,5)
ZeroDivisionError: division by zero

所以我将假设 SentenceScore / count 是有问题的除法,所以很明显 count 是 0,我建议在该行之前添加如下内容:

print("SentenceScore is",SentenceScore, "and count is",count)

所以你可以自己看到这个,现在从内部循环开始:

对于 words_list[words_list.index(each_word) + 1:] 中的 each_word2: 计数 = 计数 + 1

是唯一增加 count 和 count 在外循环的每次迭代结束时被重置为零的东西,这意味着内循环在某些时候根本没有运行,这意味着 words_list[words_list.index(each_word) + 1:] 是一个空序列。当each_wordwords_list 中的最后一个单词时,就会发生这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2022-08-22
    相关资源
    最近更新 更多