Подтвердить что ты не робот

Ссылка перед ошибкой присваивания в python

В Python я получаю следующую ошибку:

UnboundLocalError: local variable 'total' referenced before assignment

В начале файла (перед функцией, где возникает ошибка), я объявляю "total", используя ключевое слово global. Затем, в теле программы, до того, как вызывается функция, которая использует "total", я назначаю ее равным 0. Я пробовал установить ее в 0 в разных местах (включая верхнюю часть файла, сразу после ее объявления), но я не могу заставить его работать. Кто-нибудь видит, что я делаю неправильно?

4b9b3361

Ответ 1

Я думаю, что вы используете "глобальный" неправильно. См. Ссылка на Python. Вы должны объявить переменную без глобальной, а затем внутри функции, когда вы хотите получить доступ к глобальной переменной, которую вы объявляете global yourvar.

#!/usr/bin/python

total

def checkTotal():
    global total
    total = 0

См. этот пример:

#!/usr/bin/env python

total = 0

def doA():
    # not accessing global total
    total = 10

def doB():
    global total
    total = total + 1

def checkTotal():
    # global total - not required as global is required
    # only for assignment - thanks for comment Greg
    print total

def main():
    doA()
    doB()
    checkTotal()

if __name__ == '__main__':
    main()

Поскольку doA() не изменяет глобальную совокупность, результат равен 1 не 11.

Ответ 2

Мой сценарий

def example():
    cl = [0, 1]
    def inner():
        #cl = [1, 2] //access this way will throw `reference before assignment`
        cl[0] = 1 
        cl[1] = 2   //these won't

    inner()