Задать вопрос
@Deduwka

Не могу найти ошибку в коде Python?

Написал код для бота по примеру, для приема заявок и отправки в группу, но на последнем шаге не могу понять, в чем ошибка.
Вот собственно сам код:
def process_dataschet_step(message):
		try:
		    chat_id = message.chat.id
		    user = user_dict[chat_id]
		    user.dataschet = message.text

		    msg = bot.send_message(message.chat.id, getRegData(user, 'Данные', message.from_user.first_name), parse_mode="Markdown")

		    bot.send_message(config.chat_id, getRegData(user, 'Данные', bot.get_me().username), parse_mode="Markdown")

		except Exception as e:
			msg = bot.reply_to(message, 'упс ошибка!')
		bot.register_next_step_handler(msg, process_dataschet_step)


После перехода на последний шаг выдает ошибку except и заново просит ввести данные.
  • Вопрос задан
  • 202 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
shurshur
@shurshur
Сисадмин, просто сисадмин...
Не надо ловить абстрактный Exception вообще никогда! Тем более игнорировать его и даже не выводить в консоль. Произошла ошибка, а какая, почему произошла - ваще непонятно.

Какие тут могут случиться ошибки? Ну, например, если в user_dict нет записи с ключом chat_id, то случится KeyError. Или если в getRegData возвращается невалидный markdown-текст, то случится ошибка ApiException.

А далее после обработки exception путём его игнорирования тут снова вызывается register_next_step_handler, который приводит к тому, что вводимые пользователем данные снова попадают в тот же обработчик и - вероятно - натыкаются на ту же самую ошибку. Например, KeyError: конечно, ведь как при прошлом запуске этого обработчика не было значения с таким ключом, так и при последующих не появится.

До кучи, не надо вызывать постоянно bot.get_me(). Это каждый раз будет вызов API. Неужели имя бота меняется каждую минуту? Достаточно запомнить при запуске бота - и достаточно.
Ответ написан
Комментировать
@ultrasn0w
Для начала выведи себе ошибку хотя бы в консоль, тогда станет яснее что не так.

except Exception as e:
      print(e)
      msg = bot.reply_to(message, 'упс ошибка!')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы