代码之家  ›  专栏  ›  技术社区  ›  Ank12

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

  •  0
  • Ank12  · 技术社区  · 7 年前

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

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

    我的代码在没有函数的情况下工作,但是当我尝试创建函数时,我收到了一个我不理解的错误。

    TypeError:“非类型”对象不能解释为整数

    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 回复  |  直到 7 年前
        1
  •  1
  •   Markus Torshe    7 年前

    您在数据库中检查“0”-当然它不会在那里。

    如果你像这样重写你的方法,它会工作:

    def remove_from_database(index):
        try:
            database.pop(index)
        except:
            print("Not in here")
    
        2
  •  1
  •   Łukasz Szczesiak    7 年前

    你几乎没有犯错误。您试图再次从方法之外的数据库中弹出元素,您的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,它应该会更好。