@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
  • Вопрос задан
  • 104 просмотра
Решения вопроса 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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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