Почему я получаю ошибку 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())