Задать вопрос
Этот вопрос закрыт для ответов, так как повторяет вопрос Почему так происходит?
@kiril443

Объясните почему происходит ошибка UnboundLocalError: local variable 'error_count' referenced before assignment?

def init_variable():
    global error_count
    error_count = 0

def login():
    error_count += 1   <b> # тут  ошибка</b>

def main():
    init_variable()
    login()

if __name__ == '__main__':
    main()


Объясните почему происходит ошибка с глобальной переменной error_count в строке ```` error_count += 1 ````
Ошибка не возникает, если объявить во второй функции (login) перед переменной global ...
Если вынести объявление global ...; ... = 0 в функцию main перед вызовом функции login все ровно возникает ошибка

По шагам дебага перед ошибкой переменная объявлена в main.py:
61957d9973c2e529155043.png

Из того что поискал по вопросу ничего путного не нашел, потому прошу объяснить поведение кода.
  • Вопрос задан
  • 54 просмотра
Подписаться 1 Простой
Решения вопроса 1
@galaxy
Так работают переменные в питоне.
Если переменная только читается в локальной области видимости (в вашем случае - внутри функции login()), то она будет искаться последовательно локально, в области видимости на уровень выше и так до глобальной.
Если в переменную идет запись в локальном скоупе, то она становится локальной (причем сразу, а не в момент записи). Это поведение меняется объявлением переменной global или nonlocal. Надеюсь, понятно написал (если что, об этом в интернете полно материалов, например)

В вашем примере error_count в функции login() - локальная, т.к. внутри функции идет запись в нее. При этом вы пытаетесь читать из нее до записи (ибо error_count += 1 суть error_count = error_count+1).
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы