我的目标是计算属于特定时区的文件中的推文总数。 我有以下功能(我已注意到功能结尾附近的故障区域带注释):
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)
我收到ZeroDivisionError: division by zero
的{{1}}错误以及使用easternTotal
,a
,b
和c
的其他总值分裂。
如果我打印d
,a
,b
或c
的值,则会显示d
。我的问题是为什么他们的价值观为0? 0
语句中a
,b
,c
和d
的值是否有变化?
答案 0 :(得分:0)
所以这种情况发生的唯一方法是因为永远不会达到增加a,b,c和d的代码。
这可能有几个原因:
inFile
为空,因此整个for循环永远不会进入其正文len(words)
为0,因此for循环永远不会进入其正文len(keywords)
为0,因此for循环永远不会进入其正文timezone
的值不是您为 words
最初为[]
,因此,如果附加内容的循环永远不会运行,则其长度可以保持为0.
从这里开始,我们无法看到其中的哪一个正在发生,但对于你来说,使用一些印刷语句等应该很容易。
答案 1 :(得分:0)
您将eastern
除以0
。你可以通过
easternTotal = eastern/a if a > 0 else eastern
答案 2 :(得分:0)
因为你设置了a,b,c,d = 0; 当readTweets(inFile,wordsName)没有得到任何数据时,“east / a”可能会导致“east / 0”。
因此,请确保您的readTweets()确实首先获取数据。