【问题标题】:How to fix KeyError in python --> KeyError: 'message'?如何修复 python 中的 KeyError --> KeyError: 'message'?
【发布时间】:2021-05-16 14:32:34
【问题描述】:

这个错误通常不应该出现,但最近当我运行它时,出现了这个错误,我不知道如何修复它。 请如果有人可以帮助我解决以下代码上的此错误:

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) + "&text=" + message)

def send_message_button (chatId, message, buttonJSON):
    requests.post(sendURL + "?chat_id=" + str(chatId) + "&reply_markup=" + buttonJSON + "&text=" + message)
    #print (sendURL + "?chat_id=" + str(chatId) + "&reply_markup=" + buttonJSON + "&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":"Knopf\n" + "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 = newmessage['message']['chat']['id']

KeyError: '消息'

【问题讨论】:

  • 这意味着您的 newmessage 字典没有名为 message 的键。尝试将其打印出来并查看输出。
  • 请去掉python-telegram-bot标签,它是用于同名python包的——你在这里没有使用它;)

标签: python telegram telegram-bot python-telegram-bot keyerror


【解决方案1】:

您捕获了requests.exceptions.ConnectionError 但不处理它(在update 函数中),所以现在update 不会返回False,因为它根本不返回任何内容并且可以通过您的检查并造成破坏。

尝试处理异常,或者至少在其中输入print,看看它是否是导致您出现问题的原因,祝您好运!

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多