2017-10-11 64 views
0

我有以下python代码来删除某个目录中的文件的所有副本,只保留其中的一个。函数内引用python变量

它工作正常,如果我注释掉delete()函数中的前四行,但如果我不这样做,它会给我一个错误,即在分配之前引用局部变量list1。此外,我尝试使用称为全球的东西,但它没有帮助我太多,因为它给出了错误,说它是NoneType。 请帮助我,我只是一个Python初学者。

list1 = [] 
list2 = [] 
def stripe(lis): 
    for i in range(len(lis)): 
     lis[0] = lis[0].strip() 
def scan(pat): 
    pat = os.path.abspath(pat) 
    files = os.listdir(pat) 
    for file in files: 
     filepath = os.path.join(pat,file) 
     if os.path.isfile(filepath): 
      list1.append(file) 
      list2.append('{0}'.format(filepath)) 
     elif os.path.isdir(filepath): 
      scan(filepath) 
def delete(): 
    list1_1 = stripe(list1) 
    list2_1 = stripe(list2) 
    list1 = list1_1 
    list2 = list2_1 
    length = len(list1) 
    #length = length - 1 
    i = 0 
    while i < length: 
     item = list1[0] 
     a = list1[0] 
     b = list2[0] 
     del list1[0] 
     del list2[0] 
     if item in list1: 
      try: 
       os.remove(list2[list1.index(item)]) 
       #del list1[list1.index(item)] 
       #del list2[list1.index(item)] 
      except: 
       print('sorry',list1[0],'could not be deleted',sep = ' ') 
      print('wow') 
     i += 1 
     #list1.append(a) 
     #list2.append(b) 
+0

您是否尝试过创建[最小完全可验证的示例](https://stackoverflow.com/help/mcve)? –

+0

您可以考虑删除功能的前5行。因为错误仅在那里出现 –

+0

@ChiefVOLDERMORT那么理想情况下,您将提供一个展现相同行为的五行样本。通常,当您将程序与问题的实质相结合时,您会发现错误。这是我们的工艺的一部分。 –

回答

0

global看起来像您正确的选择,但如果你说这给了错误,使用首先想到的方式。 list1和list2可以是delete()函数的参数。

事情是这样的:

def delete(list1, list2): 
    ... 

def foo(): 
    list1 = [] 
    list2 = [] 
    ... 
    delete(list1, list2) 

而且,正如我所说,global始终是一个选择。下面是一个简单的例子:

list = [] 

def foo(): 
    global list 
    list.append(1234) 

def foo2(): 
    global list 
    print(list) 

foo() 
foo2() 

输出:

[1234] 
+0

当我使用全球它只是一个新的类型无变量list1,并取代了我的旧的。但第一个是非常感谢 –