Почему я получаю ошибку Flake8 F821, когда переменная существует? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть функция, которая возвращает переменную, и вторая функция, которая ее использует.В моей функции main, хотя flake8 показывает, что переменная не определена.

Я попытался добавить ее как global var и поместить файл tox.ini в ту же папку, что и мой скрипт, с ignore = F821 но это тоже не регистрировалось.A

Есть предложения?Блок кода ниже для справки.new_folder является виновником

def createDestination(self):
    '''
    split the src variable for machine type
    and create a folder with 'Evo' - machine
    '''
    s = src.split('\\')
    new_folder = (dst + '\\Evo ' + s[-1])
    if not os.path.exists(new_folder):
        os.makedirs(new_folder)
        return self.new_folder


def copyPrograms(new_folder):
    '''
    find all TB-Deco programs in second tier directory.
    '''
    # create file of folders in directory
    folder_list = os.listdir(src)
    # iterate the folder list
    for folder in folder_list:
        # create a new directory inside each folder
        folder_src = (src + '\\' + folder)
        # create a list of the files in the folder
        file_list = os.listdir(folder_src)
        # iterate the list of files
        for file in file_list:
            # if the file ends in .part .PART .dbp or .DBP - add it to a list
            if (file.endswith('.part') or file.endswith('.PART') or
                    file.endswith('.dbp') or file.endswith('.DBP')):
                # create a location variable for that file
                file_src = (src + folder + '\\' + file)
                # copy the file from the server to dst folder
                new_file = ('Evo ' + file)
                file_dst = (new_folder + '\\' + new_file)
                if not os.path.exists(file_dst):
                    shutil.copy2(file_src, file_dst)


def main():
    createDestination()
    copyPrograms(new_folder)


if __name__ == "__main__":
    main()

1 Ответ

0 голосов
/ 06 февраля 2019

Первая проблема заключается в том, что createDestination никогда не определяет атрибут self.new_folder, только локальная переменная new_folder.Отступ также отключен, так как вы хотите вернуть new_folder независимо от того, нужно ли вам было сначала его создать.

def createDestination(self):
    '''
    split the src variable for machine type
    and create a folder with 'Evo' - machine
    '''
    s = src.split('\\')
    new_folder = (dst + '\\Evo ' + s[-1])
    if not os.path.exists(new_folder):
        os.makedirs(new_folder)
    return new_folder  # not self.new_folder

Во-вторых, вы никогда не присваивали возвращаемое значение createDestination какому-либо имени, чтобывы можете передать его copyPrograms в качестве аргумента.

def main():
    new_folder = createDestination()
    copyPrograms(new_folder)

Имена имеют область видимости, а переменная с именем new_folder внутри createDestination отличается от переменной с тем же именем в main.Как следствие, нет необходимости использовать одно и то же имя;следующее определение main работает так же хорошо:

def main():
    d = createDestination()
    copyPrograms(d)

и вам даже не нужно для именования возвращаемого значения;Вы можете передать его как

def main():
    copyPrograms(createDestination())
...