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

Can't remove an item by its index - 'NoneType' object cannot be interpreted as an integer - Python

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

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}")

有人能告诉我这个错误是什么意思吗?这是否意味着索引实际上不是一个整数?我该如何解决?

你的问题出在你的 "def remove_from_database(index)" 上。 您在数据库中检查“0” - 当然它不会在那里。

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

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

你的错误很少。您已尝试从数据库外部方法再次弹出元素,您的 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 的建议,它应该会更好。