2017-10-11 8 views
0

私は次のpythonコードを使用して、特定のディレクトリ内のファイルのコピーを1つだけ削除します。関数内でのPython変数の参照

delete()関数の最初の4行をコメントアウトするとうまくいきますが、もしそうでなければ、割り当て前にローカル変数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理想的には、同じ動作を示す5行のサンプルを提供します。通常は、プログラムを問題の本質に戻しながらエラーを発見します。それは私たちの工芸品の一部です。 –

答えて

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

グローバルを使用すると、タイプnoneの新しい変数list1が作成され、古いものが置き換えられました。しかし、最初の1つは良いありがとう –

関連する問題