Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не могу понять ошибку в коде

SAlaGa Ученик (106), на голосовании 1 год назад
Помогите пожалуйста с кодом!!! Я написал код для создания чата в питоне через dialogflow и мне выдает ошибку (Traceback (most recent call last): File "C:\Users\olegp\AppData\Local\Programs\Python\Python38\ http://Module.py ", line 23, in print (textMessage(s)) NameError: name 's' is not defined) и я не знаю как ее решить. Если нужен код, вот
import apiai
import json

def textMessage(s):
# Токен API к Dialogflow
request = apiai.ApiAI('f3bb1deb708e57e72c86b6469300e1c1bb3c6fa5').text_request()
# На каком языке будет послан запрос
request.lang = 'ru'
# ID Сессии диалога (нужно, чтобы учить бота)
request.session_id = '3301megabot'
# Посылаем запрос к ИИ с сообщением от пользователя
request.query = s
responseJson = json.loads (request.getresponse().read().decode('utf-8'))
# Разбираем JSON и вытаскиваем ответ
response = responseJson['result']['fulfillment']['speech']
if response:
return response
else:
return 'Я Вас не совсем понял'
a=''
while (a!='Выход'):
message = input('Введите ваше сообщение: ')
print (textMessage(s))
Дополнен 1 год назад
Дополнен 1 год назад
Голосование за лучший ответ
drtjjrt drtjrt Профи (620) 1 год назад
Ошибка возникает из-за того, что переменная s не определена. Вместо этого вы передаете пустую строку a в функцию textMessage(). Чтобы исправить ошибку, замените s на message при вызове функции textMessage(). Также стоит изменить строчку responseJson = json.loads (request.getresponse().read().decode('utf-8')) на две отдельные строки, чтобы избежать ошибки AttributeError: 'NoneType' object has no attribute 'read'.

Вот исправленный код:
 import apiai 
import json

def textMessage(message):
# Токен API к Dialogflow
request = apiai.ApiAI('f3bb1deb708e57e72c86b6469300e1c1bb3c6fa5').text_request()
# На каком языке будет послан запрос
request.lang = 'ru'
# ID Сессии диалога (нужно, чтобы учить бота)
request.session_id = '3301megabot'
# Посылаем запрос к ИИ с сообщением от пользователя
request.query = message
responseJson = request.getresponse().read().decode('utf-8')
responseJson = json.loads(responseJson)
# Разбираем JSON и вытаскиваем ответ
response = responseJson['result']['fulfillment']['speech']
if response:
return response
else:
return 'Я Вас не совсем понял'

a = ''
while a != 'Выход':
message = input('Введите ваше сообщение: ')
print(textMessage(message))
Артем Топчинский Профи (797) 1 год назад
У тебя нет переменной 's'
В print(textmessage(s))
Говорит о том, что переменная 's' не определена.
Исправь на:
 print(textMessage(message)) 
Потом напиши, если не поможет.
Ещё исправь:
 request.query = message 
Вместо 's' напиши message
SAlaGaУченик (106) 1 год назад
Действительно так и есть, не заметил. Но у меня теперь другая ошибка, поможете? Traceback (most recent call last):
File "C:\Users\olegp\AppData\Local\Programs\Python\Python38\Module.py", line 23, in <module>
print (textMessage(s))
File "C:\Users\olegp\AppData\Local\Programs\Python\Python38\Module.py", line 15, in textMessage
response = responseJson['result']['fulfillment']['speech']
KeyError: 'result'
Артем Топчинский Профи (797) SAlaGa, посмотри документацию API с которой ты работаешь, возможно не возвращает ключ 'result' JSON ответе.
Похожие вопросы