2012-11-25 7 views
2

python이 함수에 매개 변수로 목록을 전달하는 데 이상한 문제가 있습니다. 그것은 말한다AttributeError : 'NoneType'객체에 'append'속성이 없습니다.

def foobar(depth, top, bottom, n=len(listTop)): 
    print dir(top) 
    print top.append("hi") 
    if depth > 0: 
     exit() 
    foobar(depth+1, top.append(listTop[i]), bottom.append(listBottom[i])) 

top = bottom = [] 
foobar(0, top, bottom) 

"AttributeError : 'NoneType'개체가 어떤 속성을 '추가'가 없다"상단 디렉토리 (위) 비록는 foobar에 아무도 없기 때문에이 유형의 전체 속성 및 방법 목록을 인쇄 여기에 코드입니다 명부. 뭐가 잘못 됐어? 이 재귀 함수에 매개 변수로 두 개의 목록을 전달하려고했습니다.

+1

예에서'top'과'bottom'은 같은 목록을 가리키며, 이것은 여러분의 코드에서 예기치 않은 결과를 낳을 것입니다. ('t = b = []; t.append (1); print b') – jorgeca

+0

이것은 설명 된 문제의 이유는 아니지만, 아직 눈치 채지 못한 또 다른 문제를 해결했습니다. 그래서 어느쪽으로 든 고마워. – Cravid

+0

도움이 되니 기쁩니다. 그리고 그것이 내가 대답으로 게시하지 않은 이유입니다.) – jorgeca

답변

12

. top.append() 반환 없음 :

별도로 .append()를 호출 할 필요가
>>> [].append(0) is None 
True 

, 그럼 그냥 top 전달 : 함수의 n=len(listTop) 인수가 중복되고 오직 즉 때, 한 번 실행 둘 것을

top.append(listTop[i]) 
bottom.append(listBottom[i]) 
foobar(depth+1, top, bottom) 

주 당신 함수를 만듭니다. 함수를 호출 할 때마다 평가되지 않습니다. 어떤 경우에도 여기에 게시 한 버전에서 안전하게 생략 할 수 있습니다.

+0

그래, 목록을 돌려 줄 것이라고 생각 했어. 고마워, 해결 했어. n은 창조적으로 만 설정됩니다. – Cravid

2

top.append(listTop[i]) 장소에 작품 반환 None

당신은 결과 함수에 top.append() 전달
관련 문제