Python PyTelegramBotAPI. Проверка isdigit в строке

    # Start
    @bot.message_handler(commands=['start'])
    def welcome(message):
    
        bot.send_message(message.chat.id,
                         "Добро пожаловать, {0.first_name}!\n"
                         "Я - <b>{1.first_name}</b>, бот созданный чтобы помочь рассчитать дневную норму калорий.".format(
                             message.from_user, bot.get_me()),
                         parse_mode='html')
        bot.send_message(message.chat.id, 'Введите ваш вес')
        bot.register_next_step_handler(message, get_weight)

Проблема в цикле в функции get_weight, когда ввожу буквы вместо цифр, срабатывает else и начинает флудить bot.send_message(message.chat.id, 'Вводите только цифры!').

Подскажите пожалуйста, заранее спасибо)

# Получаем вес, после идем на функцию с ростом
def get_weight(message):
    global weight
    while True:
        weight = message.text
        if weight.isdigit():
            bot.send_message(message.from_user.id, 'Введите свой рост')
            bot.register_next_step_handler(message, get_height)
            break
        else:
            bot.send_message(message.chat.id, 'Вводите только цифры!')

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

Автор решения: D. Violet

зачем вообще тут while?

@bot.message_handler(commands=['start'])
def welcome(message, where_call=None):
    if where_call is None:
        bot.send_message(message.chat.id,
                         "Добро пожаловать, {0}!\n"
                         "Я - <b>{1}</b>, бот созданный чтобы помочь рассчитать дневную норму калорий.".format(
                             message.from_user.first_name, bot.get_me().first_name),
                         parse_mode='html')
        bot.send_message(message.chat.id, 'Введите ваш вес')
        bot.register_next_step_handler(message, get_weight)
    elif where_call == 'get_weight':
        bot.send_message(message.chat.id, 'Вводите только цифры!\nВведите ваш вес')
        bot.register_next_step_handler(message, get_weight)


def get_weight(message):
    global weight
    if message.text.isdigit():
        bot.send_message(message.from_user.id, 'Введите свой рост')
        bot.register_next_step_handler(message, get_height)
    else:
        welcome(message, 'get_weight')

добавленный аргумент where_callв welcome() позволит возвращаться к этой функции и повторять нужный шаг.

введите сюда описание изображения

→ Ссылка