Почему я получаю «локальную переменную, на которую ссылаются перед присваиванием»? - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь создать новые столбцы из списка, добавляя число после каждого элемента в этом, но я получаю эту ошибку.

Я пытался объявить список как "глобальныйпеременная ", но она не работает.

colunasPes = ['numeroOrdem', 'nome']

df = pd.DataFrame(columns = colunasFam+colunasPes, index = range(len(lista)))

def criaColunas(i):#cria novas colunas no df para um novo membro
    for i in len(colunasPes):
        i = str(i)
        colunasNova[i] = colunasPes[i]+i
        colunasPes = colunasPes + colunasNova
    df = pd.DataFrame(columns = colunasFam+colunasPes, index = range(len(lista)))

criaColunas(1)

Но я получаю ошибку:

UnboundLocalError: local variable 'colunasPes' referenced before assignment

1 Ответ

2 голосов
/ 10 мая 2019

colunasPes = colunasPes + colunasNova вводит новую переменную, также называемую colunasPes, только в области действия функции, на которую вы поэтому ссылаетесь перед присвоением

Вы можете пометить его как global в функции.

def criaColunas(i):
    global colunasPes
    for i in len(colunasPes): #replace i? why pass it in?
        i = str(i)
        colunasNova[i] = colunasPes[i]+i
        colunasPes = colunasPes + colunasNova
    df = pd.DataFrame(columns = colunasFam+colunasPes, index = range(len(lista))) #this may not do what you want either

Или передать это?

def criaColunas(i, colunasPes):
    # exactly as before

criaColunas(1, colunasPes)

Кстати - вы передаете i, а затем меняете его в цикле for. Это намеренно?

Более того, вы, похоже, пытаетесь изменить другую переменную в вашей функции, которая находится вне области действия.

Попробуйте вместо этого вернуть фрейм данных?

def criaColunas(i, colunasPes):
    global colunasPes
    for i in len(colunasPes): #replace i? why pass it in?
        i = str(i)
        colunasNova[i] = colunasPes[i]+i
        colunasPes = colunasPes + colunasNova
    return pd.DataFrame(columns = colunasFam+colunasPes, index = range(len(lista))) 

df =     criaColunas(1, colunasPes)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...