Корректно ли я использую 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 шт):

Автор решения: A_Vaclav

Выкрутиться-то вы выкрутились... А смысл?

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

Официальная справочка

→ Ссылка