@KLOUNER123

Как переменную в цикле for сделать глобальной?

Как можно сделать переменную balance глобальной?
#
        mycursor.execute(f"SELECT user_id, balance from user_tg WHERE user_id like '{callback.message.from_user.id}'")
        result = mycursor.fetchall()

        for x in result:
            balance = ("%d" % (x[1]))

        btn_menu_profil = InlineKeyboardMarkup(row_width=1)
        back = InlineKeyboardButton(text="Назад", callback_data="back")
        pay = InlineKeyboardButton(text="Пополнить баланс", callback_data="pay")
        btn_menu_profil.add(pay, back)

        lk_text = f"""<b>Личный кабинет: 
— — — — — — — — — —  
        
ID: {callback.message.from_user.id}
Баланс: {balance}₽


Ошибка
local variable "balance" might be referenced before assignment
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Глобальные переменные в принципе не нужны, а в приведённом коде тем более. Проблема в том, что если result пуст, то не выполнится ни одной итерации цикла и переменная balance объявлена не будет. Так что нужно либо объявить её заранее, либо добавить условие.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Да, глобальная переменная - это зло, но если очень хочется, то объявляется она просто:
global balance
Хотя в вашем конкретном случае, в дополнении к тому, что уже отметил уважаемый Сергей Горностаев добавлю, что ваш цикл - еще более странен. Вы на каждой итерации записываете в переменную balance данные, затирая те, что были в ней перед тем. По сути, значение переменной balance после окончания цикла можно предсказать заранее и будет оно равно ("%d" % (result[-1][1])). Зачем вам цикл? Ну разве что вы организовали асинхронное выполнение нескольких процессов, и передачу данных между ними - но судя до допущенным ошибкам это более чем сомнительно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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