локальная переменная «имя», на которую ссылаются перед назначением в приложении KivyMD

#python #kivy #kivymd

Вопрос:

Я пытался составить список из своей базы данных sqlite . Список можно добавлять в режиме реального времени . Все работало нормально, пока я не добавил заявление «если», чтобы добавить больше элементов списка в режиме реального времени . Если моя база данных уже заполнена , код отлично работает даже с утверждением «если», но если в моей базе данных нет значений , возникает следующая ошибка

 local variable 'name' referenced before assignment
 

вот код

 def on_start(self):
    list_item = ObjectProperty
    list_item = [] 
    self.connection = sqlite3.connect('friend_list.db')
    self.cursor = self.connection.cursor() 
    self.cursor.execute("""SELECT * FROM friend_list ;""")
    self.connection.row_factory = lambda cursor, row: row[0]
    friends = self.connection.execute('SELECT name FROM friend_list').fetchall()
    for name in friends:
        print(name)
        button = OneLineAvatarIconListItem(text = name,on_press=lambda widget:self.change_screen("Chat_Screen"))
        self.root.ids["Chat_List"].ids["list"].add_widget(button)
        button.bind(on_press=self.press)
        list_item.append(name)

    
    if name not in list_item:  #this is the condition which is causing error
        a = list_item[-1]
        button = OneLineAvatarIconListItem(text = (a),on_press=lambda widget:self.change_screen("Chat_Screen"))
        button.bind(on_press=self.press)
        self.root.ids["Chat_List"].ids["list"].add_widget(button)
        button.bind(on_press=self.press)
        print(list_item)
 

Ответ №1:

 def on_start(self):
    list_item = ObjectProperty
    list_item = [] 
    self.connection = sqlite3.connect('friend_list.db')
    self.cursor = self.connection.cursor() 
    self.cursor.execute("""SELECT * FROM friend_list ;""")
    self.connection.row_factory = lambda cursor, row: row[0]
    friends = self.connection.execute('SELECT name FROM friend_list').fetchall()
    for name in friends:
        print(name)
        button = OneLineAvatarIconListItem(text = name,on_press=lambda widget:self.change_screen("Chat_Screen"))
        self.root.ids["Chat_List"].ids["list"].add_widget(button)
        button.bind(on_press=self.press)
        list_item.append(name)

    
        if name not in list_item:  #this is the condition which is causing error
            a = list_item[-1]
            button = OneLineAvatarIconListItem(text = (a),on_press=lambda widget:self.change_screen("Chat_Screen"))
            button.bind(on_press=self.press)
            self.root.ids["Chat_List"].ids["list"].add_widget(button)
            button.bind(on_press=self.press)
            print(list_item)
 

Отсутствует отступ в условии if.