2017-11-21 7 views
0

요소가있는 중첩 목록이 있습니다. 목록의 색인을 입력 할 때 사용자가 목록을 하나씩 삭제하기를 원합니다. 사용자 유형이 "0"이므로 ['elem', 'elem1', 'elem2']이 삭제됩니다.인덱스로 항목을 제거 할 수 없습니다 - 'NoneType'개체를 정수로 해석 할 수 없습니다 - Python

0 ['elem', 'elem1', 'elem2'] 
1 ['elem3', 'elem4', 'elem5'] 
2 ['elem6', 'elem7', 'elem8'] 
3 ['elem9', 'elem', 'elem10'] 

내 코드는 기능없이 작동하지만 기능을 만들려고 할 때 이해할 수없는 오류가 발생합니다.

TypeError: 'NoneType' object cannot be interpreted as an integer

database = [['elem', 'elem1', 'elem2'], 
        ['elem3', 'elem4', 'elem5'], 
        ['elem6', 'elem7', 'elem8'], 
        ['elem9', 'elem', 'elem10']] 


def remove_from_database(index): 
    if index in database: 
    database.pop(index) 
    return index 
    else: 
    print("not here") 

for index, elem in enumerate(database): 
    print(index, elem) 

user = remove_from_database(int(input("type in the index to remove: "))) 
result = database.pop(user) 
print(f"removed: {result}") 

사람이 오류가 무엇을 의미하는지 말해 주 시겠어요? 인덱스가 실제로 int가 아님을 의미합니까? 어떻게 해결할 수 있습니까?

+3

이 검사가'if index in database'라고 확신합니까? 'len (database) '와 비교할 것을 제안 할 것입니다. – fernand0

+2

'remove_from_database'는'None'을 반환 할 수 있습니다.'None'은'pop'에서'index' 값으로 사용할 수 있습니다. –

답변

1

"def remove_from_database (index)"에 문제가 있습니다. 데이터베이스에서 "0"을 확인합니다. 물론 거기에 없을 것입니다.

def remove_from_database(index): 
    try: 
     database.pop(index) 
    except: 
     print("Not in here") 
1

당신은 몇 가지 실수를했다 :

이 같이 당신의 방법을 다시 작성하는 경우

, 그것은 작동합니다. 당신은 메서드 밖에서 데이터베이스에서 요소를 다시 pop하려고했는데, if compare는 제대로 작동하지 않을 것이다.
database = [['elem', 'elem1', 'elem2'], 
        ['elem3', 'elem4', 'elem5'], 
        ['elem6', 'elem7', 'elem8'], 
        ['elem9', 'elem', 'elem10']] 


def remove_from_database(index): 
    if index < len(database): 
    return database.pop(index) 
    else: 
    print("not here") 
    return None 

for index, elem in enumerate(database): 
    print(index, elem) 

user = int(input("type in the index to remove: ")) 
result = remove_from_database(user) 
print(f"removed: {result}") 
#in older Python ver 
#print("removed: {0}".format(result)) 

대신 if else

은 또한 @Markus의 sugestion를 사용할 수 있으며 더 나은 작동합니다.

+0

도움을 주셔서 감사합니다. 이제 작동합니다. 'len'이 여기서 일한다는 것을 몰랐습니다. – Ank12

+1

인쇄 성명 : print (f "removed : {result}")도 작동합니다. 최신 파이썬 버전 – Ank12

+0

에서 사용 가능합니다. 파이썬 3.6에서 추가되었습니다. 이 컴퓨터에 3.5를 설치 했으므로 오류가 발생했습니다. –

관련 문제