«UnboundLocalError: локальная переменная, на которую ссылаются перед назначением» После использования глобальных переменных

#python

Вопрос:

Я пытаюсь получить доступ к переменной внутри функции, которую я уже пытался сделать глобальной, но это не работает. Вот мой код (урезанный без ненужных объявлений переменных):

 global col
col = 0
def interpret(text):
  for char in text:
      col  = 1
 

Ошибка, которую я получаю, говорит:

 Traceback (most recent call last):
  File "main.py", line 156, in <module>
    interpret(line) (Where I call the function in the rest of the code)
  File "main.py", line 21 (5), in interpret
    col  = 1
UnboundLocalError: local variable 'col' referenced before assignment
 

Как я могу это исправить?

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

1. global col должен быть внутри interpret .

2. Каждая переменная в левой части назначения (также дополненная) в функции рассматривается как локальная, если явно не объявлена глобальной с помощью «global».

Ответ №1:

Вам нужно, чтобы global оператор находился внутри функции:

 col = 0

def interpret(text):
    global col
    for char in text:
        col  = 1
 

Назначение col вне функции создает переменную, но для записи в нее внутри функции global оператор должен находиться внутри каждой функции.

кстати, как программист, вы должны очень, очень, очень сильно стараться не использовать глобалы.

Вы должны передавать переменные в функции, чтобы они могли работать:

 col = 0

def interpret(text, cnt):
    for char in text:
        cnt  = 1
    return cnt

text = ...
col = interpret(text, col)  # pass col in and assign it upon return.
 

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

1. Хорошо, я попробую это сделать. Ты сказал, что я не должен использовать глобалы. Есть ли альтернатива?

2. Да, вы должны передавать переменные в функции, чтобы они могли работать. Я обновлю свой ответ примером.