@Vadimganin

Как сделать так, чтобы код работал, пока ошибка не исправится?

Нужно обработать ошибку ввода числа, тоесть если пользователь введет число c буквами или буквы, число не пройдет и выдадет ValueError. Я это сделал, но я хочу чтобы после сообщения об ошибке можно было сразу ввети число заново, пока ошибки не будет.

Код:
@bot.message_handler(commands=["put"])
def get_put(message):
    sent_put = bot.send_message(message.chat.id, "Сколько денег(в рублях) ты хочешь положить в копилку?")
    bot.register_next_step_handler(sent_put, put)

def put(message):
        global get_put, balance
        get_put = message.text
        try:
            balance += int(get_put)
            spent_message = "Ты положил " + str(get_put) + "₽" + "\n" + "Теперь в копилке " + str(balance) + "₽"
            bot.send_message(message.chat.id, spent_message, parse_mode="html")
        except ValueError:
            bot.send_message(message.chat.id, "Ошибка! Попробуй написать только число(без букв и символов)")
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
Используя isdigit(), как сказали до этого, пишешь условие, если встречается ошибка, то возвращается на ту же позицию:
balance = 0
@bot.message_handler(commands=["put"])
def get_put(message):
    sent_put = bot.send_message(message.chat.id, "Сколько денег(в рублях) ты хочешь положить в копилку?")
    bot.register_next_step_handler(sent_put, put)

def put(message):
    global get_put
    get_put = message.text
    if (message.text).isdigit() == False:
        error_message = bot.send_message(message.chat.id, "Ошибка! Попробуй написать только число(без букв и символов)")
        bot.register_next_step_handler(error_message, put)
    else:
        balance += int(get_put)
        spent_message = "Ты положил " + str(get_put) + "₽" + "\n" + "Теперь в копилке " + str(balance) + "₽"
        bot.send_message(message.chat.id, spent_message, parse_mode="html")


И баланс наверное лучше задать глобально изначально, а то получится, что ты его заново создаешь при каждом пополнении.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AVKor
Не так надо делать. Валидация на ввод:
$ python3
Python 3.10.2 (main, Mar  8 2022, 23:56:15) [GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> '123'.isdigit()
True
>>> '123+'.isdigit()
False
>>> '123a'.isdigit()
False
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы