Какое значение возвращает sqlite3 в переменную python при обращении к несуществующей записи БД?

При отсутствии записи в БД должно выводить 'Фильм № ' + message.text + ' не найден в базе!' но вместо этого ошибка: File "C:\Users\Дмитрий\PycharmProjects\DataBases\main.py", line 19, in db_table_val return film.fetchone()[0] TypeError: 'NoneType' object is not subscriptable

@bot.message_handler(content_types=['text'])
    def end_message(message):
        if message.text == "?ИСКАТЬ ФИЛЬМЫ?":
            bot.send_message(message.chat.id, '?ДЛЯ ПРОСМОТРА ФИЛЬМА ВВЕДИТЕ КОД В ФОРМАТЕ<<123>>')
        else:
            val1 = db_table_val(message.text)
            pic1 = db_table_pic(message.text)
            rkb = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
            rkb.add('?ИСКАТЬ ФИЛЬМЫ?')
            if val1 is not None:
                if pic1 is not None:
                    bot.send_photo(message.chat.id, photo=pic1, caption='Фильм № ' + message.text + ' называется:             ' + val1, reply_markup=rkb)
                else:
                    bot.send_message(message.chat.id, 'Фильм № ' + message.text + ' называется:             ' + val1+ '(Обложка отсутствует)', reply_markup=rkb)
            else:
                bot.send_message(message.chat.id, 'Фильм № ' + message.text + ' не найден в базе!', reply_markup=rkb)

Ответы (1 шт):

Автор решения: Utsiye

Sqlite3 если не находит ничего, то просто выдает ошибку NoneType, тоесть возвращает объект, у которого нет типа. Вам следует использовать try except:

@bot.message_handler(content_types=['text'])
        def end_message(message):
            try:
                if message.text == "?ИСКАТЬ ФИЛЬМЫ?":
                    bot.send_message(message.chat.id, '?ДЛЯ ПРОСМОТРА ФИЛЬМА ВВЕДИТЕ КОД В ФОРМАТЕ<<123>>')
                else:
                    val1 = db_table_val(message.text)
                    pic1 = db_table_pic(message.text)
                    rkb = types.ReplyKeyboardMarkup(one_time_keyboard=True, resize_keyboard=True)
                    rkb.add('?ИСКАТЬ ФИЛЬМЫ?')
                    if val1 is not None:
                        if pic1 is not None:
                            bot.send_photo(message.chat.id, photo=pic1, caption='Фильм № ' + message.text + ' называется:             ' + val1, reply_markup=rkb)
                        else:
                            bot.send_message(message.chat.id, 'Фильм № ' + message.text + ' называется:             ' + val1+ '(Обложка отсутствует)', reply_markup=rkb)
                except:
                    bot.send_message(message.chat.id, 'Фильм № ' + message.text + ' не найден в базе!', reply_markup=rkb)

Вы также возможно забыли установить соединение с базой данных, после чего закрыть это соединение.

→ Ссылка