Диапазон времени, условие пропускает введеное значение. В чем может быть ошибка?
Пользователь должен ввести время в промежуток с 08:30 до 11:00.
Но условие пропускает любое значение, как можно изменить код?
@dp.message_handler(state=reg.tim_s)
async def get_tim(message: types.Message, state: FSMContext):
answer = message.text
try:
if answer.strtime("%H:%M") >= "08:30" and answer.strtime("%H:%M") <= "11:00":
await state.update_data(tim_s=answer)
else:
await message.answer('Введите корректное время с 08:30 до 11:00, например 09:30')
except Exception:
await message.answer('Введи корректную дату в формате %H:%M')
Ответы (2 шт):
Автор решения: icYFTL
→ Ссылка
Вы сравниваете строки answer.strtime("%H:%M") >= "08:30"
А надо сравнивать объекты времени:
from datetime import datetime
answer = input()
try:
dt = datetime.strptime(answer, '%H:%M')
fdt = datetime(hour=8, minute=30, year=dt.year, day=dt.day, month=dt.month)
sdt = datetime(hour=11, minute=0, year=dt.year, day=dt.day, month=dt.month)
if fdt <= dt <= sdt:
print('ok')
else:
print('bad')
except Exception:
print('error')
Автор решения: devnull
→ Ссылка
По итогу вы сравниваете не даты, а строки из-за этого ошибка
Вот пример рабочего кода:
from datetime import time, datetime
@dp.message_handler(state=reg.tim_s)
async def get_tim(message: types.Message, state: FSMContext):
answer = message.text
try:
date_time = datetime.strptime(answer, '%H:%M')
except (TypeError, ValueError):
await message.answer('Введи корректную дату в формате %H:%M')
return
input_time = date_time.time()
if input_time >= time(hour=8, minute=30) and input_time <= time(hour=11, minute=00):
await state.update_data(tim_s=answer)
else:
await message.answer('Введите корректное время с 08:30 до 11:00, например 09:30')
Основные отличия что я привожу datetime к time и вынес из try except код который скорее всего не упадет
Также спасибо за ответ от @icYFTL