Какое значение возвращает 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)
Вы также возможно забыли установить соединение с базой данных, после чего закрыть это соединение.