@dmitrysurkov

Local variable 'chat_info' referenced before assignment. Почему не может вернуть массив?

Код из database.py

def get_active_chat(self, chat_id):
        with self.connection:
            chat = self.cursor.execute("SELECT * FROM `chats` WHERE `chat_one` = ?", (chat_id,))
            id_chat = 0
            for row in chat:
                id_chat = row[0]
                chat_info = [row[0], row[2]]
            if id_chat == 0:            #91 строчка
                chat = self.cursor.execute("SELECT * FROM `chats` WHERE `chat_two` = ?", (chat_id,))        #92
                for row in chat:                     #93
                    id_chat = row[0]               #94
                    chat_info = [row[0], row[1]]              #95
                if chat_id == 0:                                     #96
                    return False                                     #97
                else:                                                     #98
                    return chat_info                              #99
            else:                                                        #100
                return chat_info                                  #101


Код из bot.py

@dp.message_handler(content_types=['text'])
async def bot_message(message: types.message):
    chat_info = db.get_active_chat(message.chat.id)         #28 строчка
    if message.chat.type == 'private':


Ошибка
File "/Users/dmitrij/Desktop/bot/from scratch/bot.py", line 28, in bot_message
    chat_info = db.get_active_chat(message.chat.id)
  File "/Users/dmitrij/Desktop/bot/from scratch/database.py", line 99, in get_active_chat
    return chat_info
UnboundLocalError: local variable 'chat_info' referenced before assignment


Я пробовал переносить строки с 91 по 101 на один таб дальше и до определенного момента все работало, пока не перестал работать один очень важный нюанс в остановке чата. Вернул все обратно и перестало работать все остальное связанное с chat_info. Получается фикситься одна ошибка - возникает другая. И наоборот. Не понимаю что тут не так
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
@bacon
Чему равно chat_info если sql вернет пустой ответ, а chat_id != 0?
Короче чтобы не мучился, в самом начале в функции get_active_chat сделай значение chat_info по-умолчанию
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
У тебя в двух местах есть цикл вида "for row in chat", внутри которого присваивается значение chat_info.
Нет гарантий, что этот цикл выполнится хотя бы один раз. chat может быть пустой коллекцией.
Если цикл не выполнится, chat_info никогда не будет присвоено значение, и вернуть её будет нельзя.
Об этом тебя и предупреждает ошибка.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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