← Все вопросы

UnboundLocalError: local variable referenced before assignment — в чём причина?

Задан 7 месяцев назад761 просмотров3 ответа
15
count = 0

def inc():
    count = count + 1
    return count

inc()

Падает UnboundLocalError: local variable 'count' referenced before assignment. Но count же объявлен сверху!

3 ответа

24
✓ Принятый ответ — помог автору

Раз внутри функции есть присваивание count = ..., питон считает count локальной переменной на всю функцию. И в строке count = count + 1 справа он читает ещё не созданную локальную, а не глобальную — отсюда ошибка.

Два решения в зависимости от задачи:

# 1) если правда надо менять глобальную:
def inc():
    global count
    count = count + 1
    return count

# 2) лучше — передавать и возвращать:
def inc(count):
    return count + 1

count = inc(count)

Второй вариант чище: функции на глобалках быстро превращаются в кашу. global оставляй для редких случаев.

Владимир Елисеев не знал что присваивание делает её локальной на всю функцию, спасибо! · 7 месяцев назад
Владимир Григорьев @ автор: да, это решается на этапе компиляции, до запуска · 7 месяцев назад
7

Добавь global count первой строкой функции.

5

Присвоение внутри делает имя локальным целиком.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект