Использование переменной перед ошибкой присвоения при использовании списков - PullRequest
0 голосов
/ 12 января 2019

Использование переменной 'имя_критерия' перед пилинтом присвоения (E0601) . Эта ошибка появляется только для уже назначенного списка «crit_names», но не для других списков, которые назначены таким же образом. Любые указатели или решения очень ценятся!

КОД SNIPPET:

data = list()
lines = list()
n_vectors = list()
vectors = list()
medium_vectors = list()
classnames = list()
classes_insert_lines = list()
vectors_raw = list()
criteria_names = list()

def DataGet(temp_pulse_file):
    data[:] = []
    n_vectors[:] = []
    vectors[:] = []
    medium_vectors[:] = []
    classnames[:] = []
    classes_insert_lines[:] = []
    vectors_raw[:] = []
    criteria_names[:] = [] #<- this is where the error pops up

    with open(temp_pulse_file, "r", encoding='utf-8') as file:
        lines = (file.read()).split("\n")
    file.close()

    n = -1
    for i in range(len(lines)):
        data.append(lines[i].split(","))

        if data[i][0] == ">":
            n += 1
            classnames.append(data[i][1])
            classes_insert_lines.append(i + 1)
            n_vectors.append(0)
            vectors_raw.append([])
            vectors.append([])
        elif data[i][0] == "#":
            weights = data[i][1:]
        elif data[i][0] == "$":
            criteria_names = list(data[i][1:])
        else:
            n_vectors[n] += 1
            vectors[n].append(data[i])
            vectors_raw[n].append(lines[i])


    n_elems = len(vectors[0][0])
    classes = len(classnames)

    for i in range(classes):
        for j in range(n_vectors[i]):
            for k in range(n_elems):
                vectors[i][j][k] = float(vectors[i][j][k])

    return n_elems, classes, n_vectors, weights, lines, classes_insert_lines, vectors_raw

n_elems, classes, n_vectors, weights, lines, classes_insert_lines, vectors_raw = DataGet(getcurrentdir() + 'db.pulse')
print(' criteria_names:',criteria_names)

Когда я удаляю criteria_names[:] = [], никаких ошибок для других списков, используемых в функции, не возникает. Все помогает.

1 Ответ

0 голосов
/ 12 января 2019

Благодаря @martineau и @Barmar, добавили global criteria_names в начале функции DataGet(), и это сработало чудом. Странно, что.

...