«UnboundLocalError: локальная переменная ‘count’, на которую ссылаются перед присвоением», когда целочисленная переменная получает ссылку в функции

#python #tkinter

#python #tkinter

Вопрос:

Всякий раз, когда я упоминаю переменную (которая уже существует) в функции, она выдает эту ошибку:

 UnboundLocalError: local variable 'count' referenced before assignment
  

Вот мой код:

 from tkinter import *
from tkinter.ttk import *
import simpleaudio as sa
main = Tk()
list = ["you yu" , "she hui fa zan" , "bian hua" , "dui yi xie shi" , "you bu tong de kan fa" , "wan quan bu tong" , "chi ... de guan dian" , "qing chun qi" , "you ge xing", "yi zi wo wei zhong xin"]
count = 0
def next():
    if count == 10:
        Label(main, text="You have finished!").pack(side= TOP)
    else:
        Label(main, text= list[count]).pack(side= TOP)
        count = str(count)
        wave_obj = sa.WaveObject.from_wave_file(r"C:UsersUserDownloadsPyWebsounds\"   count   ".wav")
        count = int(count)
        play_obj = wave_obj.play()
        play_obj.wait_done()
        count  = 1
Button(main, text= "next", command= next).pack(side= TOP)
main.mainloop()
  

Я не вижу ничего плохого в коде, пожалуйста, помогите мне.

Комментарии:

1. попробуйте поместить main = Tk() после count = 0 ?

2. В Python уже есть встроенный next(), поэтому вам следует использовать какое-то другое имя для вашей функции.

3. Простая global count внутренняя функция решит эту проблему, имейте в виду, она переопределит существующую встроенную next() функцию

Ответ №1:

next() необходимо конкретно указать, что разрешено использовать глобальную переменную count локально. Добавьте строку global count в функцию, чтобы она выглядела так:

 ...
def next():
    global count
    if count == 10:
...
  

Для получения дополнительной информации о локальных и глобальных переменных ознакомьтесь с этой статьей из tutorialspoint .

Ответ №2:

Вам нужно переместить global ключевое слово вниз в вашу функцию.

 count = 0
def next():
    global count