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

Как записать новое значение из цикла (Python)?

Пользователь вводит цифры - код выполняется дальше - все ок.
Если не цифры, то мы должны попросить пользователя ввести содержимое еще раз.

def get_age(message):
    global age;
    age = message.text;
    while isinstance(age, str):
    	try:
    		age = int(age)
    		bot.send_message(message.from_user.id, 'Конверт в цифру произошел')
    	except ValueError:
    		bot.send_message(message.from_user.id, 'Не конвертнули. Попробуй еще раз')

Тут получается вечный цикл после except.
bot.send_message(message.from_user.id, 'Не конвертнули. Попробуй еще раз')


Я просто не могу его заставить переспросить пользователя о новых данных.

Это библиотека telebot для работы с Telegram API
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
LebedevStr,
на тот случай если вместо "5" пользователь напишет "пять".
оно для этого и сделано, проверять в строке содержится число либо нет.

Используйте обработчики шагов
https://github.com/eternnoir/pyTelegramBotAPI/blob...

step_msg = bot.send_message(message.from_user.id, 'Не конвертнули. Попробуй еще раз')
bot.register_next_step_handler(step_msg, get_age)


while isinstance(age, str):
Непонятно, зачем while и зачем проверка, является ли строкой данная переменная. Если вы берете значение из .text, оно в принципе не может быть ничем другим, кроме как строкой.

От глобальной переменной я бы тоже избавился, но не знаю, может вам нужна.

И ; - для чего и зачем?

Ну и в итоге выглядело бы так
def get_age(message):
    global age
    age = message.text
    if age.isdigit():
        bot.send_message(message.from_user.id, 'Конверт в цифру произошел')
    else:
        step_msg = bot.send_message(message.from_user.id, 'Не конвертнули. Попробуй еще раз')
        bot.register_next_step_handler(step_msg, get_age)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
31 янв. 2025, в 00:16
43000 руб./за проект
30 янв. 2025, в 21:33
5000 руб./за проект
30 янв. 2025, в 21:14
4000 руб./за проект