2017-10-11 4 views
0

나는 다음의 파이썬 코드를 사용하여 특정 디렉토리에서 파일 중 하나만 유지하는 모든 파일 사본을 삭제합니다.함수 내에서 파이썬 변수 참조하기

delete() 함수의 처음 네 줄을 주석으로 처리해도 문제가 없지만 할당되지 않은 경우 로컬 변수 list1이 할당 전에 참조되는 오류가 발생합니다. 또한 글로벌이라고 불리는 것을 사용해 보았습니다 만, 그것이 NoneType이라고 말하는 에러를주었습니다. 파이썬에서 중급 초보자입니다.

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

전 세계를 사용했을 때 유형 none의 새 변수 list1을 작성하고 이전 버전을 대체했습니다. 하지만 첫 번째는 좋은 감사입니다. –