Что не так с моим ботом Telegram Covid Tracker?

У меня есть простой Telegram-бот на питоне, который работал нормально, я запустил его сегодня и получил сообщение об ошибке для определенной страны, которое говорит следующее:

return self.callback(update, context)
  File "main.py", line 21, in stats
    data['confirmed'],
TypeError: 'NoneType' object is not subscriptable

Вот мой код;

from telegram import ReplyKeyboardMarkup
from telegram.ext import Updater, CommandHandler, ConversationHandler, MessageHandler, Filters
from covid19 import Covid19

buttons = ReplyKeyboardMarkup([['Statistics'], ['World']], resize_keyboard=True)
covid = Covid19()
TOKEN = '**********'

def start(update, context):
    update.message.reply_html(
        '<b>Greetings, {}</b>\n \n some text'.format(update.message.from_user.first_name), reply_markup=buttons)
    return 1

def stats(update, context):
    data = covid.getByCountryCode('UA')
    update.message.reply_html(
        '???????? <b>In Ukraine</b>\n \n<b>Infected:</b> {}\n<b>Recovered:</b> {}\n<b>Dead:</b> {}'.
            format(
            data['confirmed'],
            data['recovered'],
            data['deaths']), reply_markup=buttons)

def world(update, context):
    data = covid.getLatest()
    update.message.reply_html(
        '???? <b>World</b>\n \n<b>Infected:</b> {}\n<b>Recovered:</b> {}\n<b>Dead:</b> {}'.format(
            "{:,}".format(data['confirmed']),
            "{:,}".format(data['recovered']),
            "{:,}".format(data['deaths'])
        ), reply_markup=buttons)

updater = Updater(TOKEN, use_context=True)
conv_handler = ConversationHandler(
    entry_points = [CommandHandler('start', start)],
    states={
        1: [MessageHandler(Filters.regex('^(Statistics)$'), stats),
            MessageHandler(Filters.regex('^(World)$'), world),
            ]
    },
    fallbacks=[MessageHandler(Filters.text, start)]
)

updater.dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()

После /start появляется две кнопки - Статистика и Мир, когда я нажимаю или набираю Мир, он работает нормально, когда я нажимаю Статистика, появляется та ошибка, о которой я упоминал выше.

Так что же не так с моим кодом, пару дней назад он работал, а сейчас что я делаю не так?

Мой вопрос отличается от этого Python Math - TypeError: ' Объект NoneType' не подлежит подписке. У меня Telegram Tracker Bot, который работал днем ​​раньше, а сейчас перестал работать, причина в этой части;

def stats(update, context):
    data = covid.getByCountryCode('UA')
    update.message.reply_html(
        '???????? <b>In Ukraine</b>\n \n<b>Infected:</b> {}\n<b>Recovered:</b> {}\n<b>Dead:</b> {}'.
            format(
            data['confirmed'],
            data['recovered'],
            data['deaths']), reply_markup=buttons)

Что тут не так, ошибка может быть такая же но это написано в модулях телеграм и ковид не только математика. Буду признателен, если кто-то исправит мой код.


person Robert Makeev    schedule 19.08.2020    source источник


Ответы (1)


Это сообщение говорит о том, что ваша переменная data не имеет значения (т. е. имеет значение None). Поэтому вы не можете спросить Python, что такое data['confirmed'].

Поскольку вы получаете значение data из covid.getByCountryCode('UA'), имеет смысл проверить, почему этот вызов возвращает None. Возможно, прочитайте документацию или посмотрите ее исходный код. Я рискну предположить, что он звонит в какой-то онлайн-сервис, который либо не работает, либо не работает должным образом.

person jurez    schedule 19.08.2020