Почему зацикливается exception и как это исправить?
Пишу бота для скачивания и отправки картинок с сайта. Основная часть работает, но хотелось бы сделать предупреждение, о неправильно введенных данных ( то есть вместо чисел был введен текст). Попробовал сделать через exception, но оно зацикливает ответ Цифрами, пожалуйста. Есть ощущение, будто изначально начал неправильно писать код. Как можно это исправить?
import telebot
import requests
#bot = telebot.TeleBot("резерв токен")
bot = telebot.TeleBot("токен ._.")
lesson = 0
number = 0
@bot.message_handler(content_types=['text'])
def start(message):
if message.text == '/start':
bot.send_message(message.from_user.id, "Введи номер урока:")
bot.register_next_step_handler(message, get_lesson)
else:
bot.send_message(message.from_user.id, 'Напиши /start')
def get_lesson(message):
global lesson
while lesson == 0:
try:
lesson = int(message.text)
except ValueError:
bot.send_message(message.from_user.id, 'Цифрами, пожалуйста')
bot.register_next_step_handler(message, get_lesson)
bot.send_message(message.from_user.id, 'Введи номер упражнения:')
bot.register_next_step_handler(message, get_number)
def get_number(message):
global number
number = int(message.text)
bot.send_message(message.from_user.id, 'Начинаю качать...')
url = 'sourceUrl' + str(lesson) + '/' + str(number) + '.jpg'
r = requests.get(url)
bot.send_photo(message.chat.id, r.content)
message = " "
bot.infinity_polling()
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Цикл тут не нужен, используйте вместо него проверку и при ValueError выходите из функции:
def get_lesson(message):
global lesson
if lesson == 0:
try:
lesson = int(message.text)
except ValueError:
bot.send_message(message.from_user.id, 'Цифрами, пожалуйста')
bot.register_next_step_handler(message, get_lesson)
return
bot.send_message(message.from_user.id, 'Введи номер упражнения:')
bot.register_next_step_handler(message, get_number)