无法通过索引删除项目 - 'NoneType'对象不能解释为整数 - Python

时间:2017-11-21 11:13:16

标签: python python-3.x function enumerate

我有一个带元素的嵌套列表。我希望用户在他/她键入列表索引时删除一个列表:所以假设用户键入:“0”,因此['elem', 'elem1', 'elem2']将被删除。

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

我的代码没有该函数,但是当我尝试创建一个函数时,我收到一个我不理解的错误。

  

TypeError:'NoneType'对象不能解释为整数

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?我该如何解决?

2 个答案:

答案 0 :(得分:1)

你的问题是你的" def remove_from_database(index)"。 你检查" 0"在数据库中 - 当然不会在那里。

如果您重写这样的方法,它将起作用:

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

答案 1 :(得分:1)

你几乎没有错。您已经尝试从数据库外部方法再次弹出元素,您的if比较将无法正常工作。

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,它应该更好。