#python
#python
Вопрос:
Эта программа написана на Python3 в IDLE 3. Хорошо, итак, это новое обновление кода, и ошибка, с которой я столкнулся, — ошибка ZeroDivisionError. Это можно найти в строке 68, где говорится следующее:
если (среднее / количество)> 2:
Это ОШИБКА для приведенного выше утверждения:
Traceback (most recent call last):
File "/Users/angelajackson/Desktop/Movie_Part_2.py", line 68, in <module>
if (average / count) > 2:
ZeroDivisionError: division by zero
МОЙ ПРОГРАММНЫЙ КОД НИЖЕ:
import time
Start_Time = time.time()
#to store the words
sentimentData = {}
#opening the file for reviews
fileData = open('movie_reviews.rtf', 'r')
#Sotring all data into TotalData after converting the data into lowercase
TotalData = str.lower(fileData.read())
#file closing
fileData.close()
#split the data into lines by using newlinecharacter
reviewsData = TotalData.split('n')
print('Initializing sentiment database')
#splitin the line into words by using space
for review in reviewsData:
words = review.split(' ')
for word in words:
if word not in sentimentData:
try:
sentimentData[word] = [1, int(float(words[0]))]
except:
print("Cannot convert this string to an integer")
else:
sentimentData[word][0] = 1
sentimentData[word][1] = int(float(words[0]))
#doing the analysis on captured data
ending_time = time.time()
#time taken to read data
time = format(ending_time - Start_Time, '.2f')
#status what we are done
print('All Sentiment Data is taken from file and setups like a database')
print('Unique words are :', len(sentimentData))
print('For analyses taken time to compelte', time)
print('')
#asking the user to take phrase to enter phrase and converting to lower case and storing
phraseData = str.lower(input('Enter a phrase to test: '))
single_phrase = phraseData.split()
average = 0
count = 0
#count values to figure out the average score for the phrase
for word in single_phrase:
if word in sentimentData:
score = sentimentData[word][1] / sentimentData[word][0]
print('* '', word, '' appears ', sentimentData[word][0], ' times with an average score of ', score, sep = '')
average = score
count = 1
else:
print('* '', word, '' does not appear in any movie reviews', sep = '')
#if no words appears
if count == 0:
print('Not enough words to determine sentiment.')
else:
print('Average score for this phrase is:', average / count)
#if average/count > 2 then it is a positive phrase
if (average / count) > 2:
print('This is a POSITIVE phrase')
else:
print('This is a NEGATIVE phrase')
Комментарии:
1. Какой бы редактор кода вы ни использовали, он не имеет отношения к такой ошибке. Пожалуйста, предоставьте соответствующую информацию, такую как пример фрагмента вашего входного файла ‘movie_review.txt «. Также какая строка выдает ошибку? Можете ли вы опубликовать все сообщение об ошибке?
2. Строка 52 — это место, где возникает ошибка, в которой говорится: print(‘* «, word, » появляется ‘, sentimentData [word] [0], ‘ раз со средним баллом ‘, score, sep = «)
3. Таким образом, синтаксическая ошибка возникает при использовании python2. Если вы используете python3, синтаксическая ошибка исчезнет. Просто запустите
python3 your_script.py
. Отправьте полное сообщение об ошибке с номером строки, который вы получите. Не публикуйте изображения. Это плохая практика.4. КОД БЫЛ ОБНОВЛЕН нормально, поэтому я понял, что для работы этой программе требуется функция try и except . После попытки этого я столкнулся с другой ошибкой, касающейся ошибки ZeroDivisionError для следующего оператора в строке 68: if (average / count)> 2:
Ответ №1:
Если значение count
равно 0, то вы не хотите вычислять average / count
, так как получите сообщение об ошибке. Итак, просто переместите свой if (average / count) > 2
внутри else:
if count == 0:
print('Not enough words to determine sentiment.')
else:
print('Average score for this phrase is:', average / count)
if average / count > 2:
print('This is a POSITIVE phrase')
else:
print('This is a NEGATIVE phrase')