Я пытаюсь создать бота, который подключается к Slack и продолжает получать TypeError:
Traceback (most recent call last):
File "happybotV4.2.py", line 217, in <module>
av_mood, user_count, total_mood = datamood(user_answer, user_id, user_count, total_mood, av_mood)
TypeError: 'NoneType' object is not iterable
Вот код:
if slackinput_list and len(slackinput_list) > 0:
user_answer, user_id, channel, event_type = parse_slack_useranswer(slackinput_list)
#print(user_answer,user_id)#test
if user_answer and user_id and user_id != 'U7GRT34H3' and event_type= = "message":
if user_answer= = "1" or user_answer= = "5":
print(user_answer, user_id, user_count, total_mood, av_mood) #test
#if user_id not in user_list:
av_mood, user_count, total_mood = datamood(user_answer, user_id, user_count, total_mood, av_mood)
И код datamood:
def datamood(mood, user, count, total_mood, average_mood):
print(user_list)
if user not in user_list:
count = count+1
mood_user.append(mood)
user_list.append(user)
print(user_list, user)
if len(mood_user)>0:
for i in mood_user :
if i= = "1":
n=1
elif i= = "5":
n=5
total_mood = total_mood + n
print(total_mood)#test
average_mood = total_mood/count
print (average_mood, count) #test
return average_mood, count, total_mood
else:
return average_mood, count, total_mood
Фактически, datamood работает один раз, но когда я пытаюсь вызвать его второй раз, я получаю сообщение об ошибке. Я проверил, что все переменные (то есть user_answer, user_id, user_count, total_mood, av_mood) не имеют значения None и имеют правильный формат.
Любые идеи?
Если одна из переменных не определена, вы получите NameError, а не TypeError.
Вот код:: code: def datamood (mood, user, count, total_mood, average_mood): print (user_list), если пользователя нет в user_list: count = count + 1 mood_user.append (mood) user_list.append (пользователь), если len (mood_user)> 0: для i в mood_user: if i == "1": n = 1 elif i == "5": n = 5 total_mood = total_mood + n average_mood = total_mood / count return average_mood, count, total_mood
Скорее всего, одна из переменных, которые вы передаете в datamood(), либо содержит объект NoneType, либо ваш метод возвращает объект NoneType, другими словами, никакого значения, связанного с переменной. Без дополнительной информации мы ничего не сможем сделать. Пожалуйста, рассмотрите возможность включения минимальный воспроизводимый пример, с которым мы будем работать, или публикации большего количества вашего кода. Вы можете использовать трассировку, чтобы определить связанный код, и вы можете использовать операторы печати, чтобы проверить, содержат ли переменные значение перед вызовом метода datamood() и после того, как он возвращает значения.
@ ArthurDuchet-Suchaux, пожалуйста, отредактируйте исходный вопрос и включите код.
Пожалуйста, отправьте код для просмотра. Я предполагаю, что определение переменной обнуляет значение, но невозможно определить без кода, стоящего за ней. Спасибо.
Спасибо за ответы, я только что обновил свой пост
спасибо @artomason, это сработало!
@ ArthurDuchet-Suchaux Я отправил ответ. Если это помогло решить вашу проблему, примите его.






Ваш вызов метода datamood() ожидает возврата значения. Поскольку ваша логика явно не сообщает вашему методу, что делать, когда user существует в user_list, метод возвращает None или объект NoneType. Если возврат не задан явно в методе Python, он всегда будет возвращать None. Следовательно, когда вы впервые вызываете метод, а user не существует, ожидается возвращаемое значение; однако, когда вы вызываете метод и user действительно существует, ваш метод возвращает None.
Вам нужно будет опубликовать код для
datamood(). Видимо, иногда возвращает None.