Почему я получаю ошибку Flake8 F821, когда переменная существует?

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

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

Какие-либо предложения? Блок кода ниже для справки. 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 ответ

Решение

Первая проблема заключается в том, что 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())
Другие вопросы по тегам