Как исправить ошибку ключа в python —> Ошибка ключа: «сообщение»?

#python #telegram #telegram-bot #python-telegram-bot #keyerror

Вопрос:

Эта ошибка обычно не должна появляться, но недавно, когда я запускаю это, появляется эта ошибка, и я понятия не имею, как ее исправить. Пожалуйста, если кто-нибудь может помочь мне исправить эту ошибку в приведенном ниже коде:

 import requests
import json
from time import sleep

global OFFSET
OFFSET = 0

botToken = ""

global requestURL
global sendURL

requestURL = "http://api.telegram.org/bot"   botToken   "/getUpdates"
sendURL = "http://api.telegram.org/bot"   botToken   "/sendMessage"

def update (url):
    global OFFSET

    try:
        update_raw = requests.get(url   "?offset="   str(OFFSET))
        update = update_raw.json()
        result = extract_result(update)

        if result != False:
            OFFSET = result['update_id']   1
            return result
        else:
            return False

    except requests.exceptions.ConnectionError:
        pass

def extract_result (dict):
    result_array = dict['result']

    if result_array == []:
        return False
    else:
        result_dic = result_array[0]
        return result_dic

def is_callback (dict):
    if 'callback_query' in dict:
        return True

def send_message (chatId, message):
    requests.post(sendURL   "?chat_id="   str(chatId)   "amp;text="   message)

def send_message_button (chatId, message, buttonJSON):
    requests.post(sendURL   "?chat_id="   str(chatId)   "amp;reply_markup="   buttonJSON   "amp;text="   message)
    #print (sendURL   "?chat_id="   str(chatId)   "amp;reply_markup="   buttonJSON   "amp;text="   message)

while True:
    newmessage = update (requestURL)

    if newmessage != False:

        if is_callback(newmessage) == True:
            userchatid = newmessage['callback_query']['message']['chat']['id']
            usertext = newmessage['callback_query']['message']['text']
            username = newmessage['callback_query']['message']['chat']['first_name']
            callback_data = newmessage['callback_query']['data']

            send_message (userchatid, "Callback from "   callback_data   ", pressed by "   username)

        else:
            userchatid = newmessage['message']['chat']['id']
            usertext = newmessage['message']['text']
            username = newmessage['message']['chat']['first_name']

            if usertext.lower() == "button":
                buttonDict1 = {"text":"Knopfn"   "hitest", "callback_data":"Knopf"}
                buttonDict2 = {"text":"Knopf2", "callback_data":"Knopf2"}
                buttonArr = {"inline_keyboard":[[buttonDict1, buttonDict2]]}
                send_message_button (userchatid, "Hi "   username, json.dumps(buttonArr))
            else:
                send_message(userchatid, "You said: "   usertext)

    sleep (1)
 

Это ошибка, которая появляется у меня после запуска этого бота

Строка: 67

userchatid = новое сообщение[‘сообщение’][‘чат’][‘идентификатор’]

Ошибка ключа: «сообщение»

Комментарии:

1. Это означает, что в вашем newmessage словаре нет вызываемого ключа message . Попробуйте распечатать его и посмотреть результат.

2. Пожалуйста, удалите python-telegram-bot тег, который предназначен для пакета python с тем же именем — и вы не использовали его здесь 😉

Ответ №1:

Вы ловите requests.exceptions.ConnectionError , но не обрабатываете его ( в update функции), поэтому теперь update не возвращается False , так как он вообще ничего не возвращает и может пройти вашу проверку и вызвать хаос.

Попробуйте разобраться с исключением или, по крайней мере, поставьте print там, чтобы увидеть, не вызывает ли оно у вас проблем, удачи!