Корректно ли я использую try except?
Я делаю небольшого телеграмм бота на aiogramm:
if message.text.lower() == 'магазин страховок':
async with state.proxy() as data:
#code
data['magazine'] = True
async with state.proxy() as data:
try:
if message.text.lower() == 'страховка на жизнь' and data['magazine']:
#code
data['magazine'] = False
except KeyError:
pass
В данном коде пользователь вводить "Магазин страховок" и ему предлагают купить страховку, он выбирает нужную и все работает, но если не заходить в "Магазин страховок" и вписать допустим "Страховка на жизнь" мне выбивает ошибку о том что я не инициализирую переменную, ошибка мне не мешает, все так и должно быть, я хочу узнать корректно ли я выкрутился с ситуации или нет? (Я не могу инициализировать переменную ибо работаю в одном обработчике событий и переменная постоянно будет меняться)
Ответы (1 шт):
Выкрутиться-то вы выкрутились... А смысл?
if message.text.lower() == 'магазин страховок':
async with state.proxy() as data:
#code
data['magazine'] = True
async with state.proxy() as data:
try:
# Переменная data['magazine'] не определена... и всегда проверка условия будет
# приводить к пропуску try, и переходу к except...
# Поэтому весь этот фрагмент кода можно заменить одним pass
if message.text.lower() == 'страховка на жизнь' and data['magazine']:
#code
data['magazine'] = False
except KeyError:
pass
Если вы хотите установить False из-за не верно выбранной строки (мое предположение), тогда:
if message.text.lower() == 'магазин страховок':
async with state.proxy() as data:
#code
data['magazine'] = True
else:
async with state.proxy() as data:
#code
data['magazine'] = False
Ну а если вы хотите проверить состояние переменной...
async with state.proxy() as data:
try:
if data['magazine']:
#code
#вот тут пишем, что делать если data['magazine'] установлена.
pass
except KeyError:
#code
#вот тут пишем, что делать если data['magazine'] не установлена.
pass
#необезательный
else:
#code
#выполнится в случае если исключений не было
pass
#необязательный
finally:
#code
#выполнится в любом случае
pass