Ошибка синтаксиса при вычислении среднего значения данных настроений из другого файла с использованием кода Python

#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')