Python:"' Nonetype'不可迭代"没有任何迭代

时间:2016-04-01 13:37:28

标签: python iteration runtime-error hashtable nonetype

我正在编写程序以使用线性探测形成不同大小的哈希表。在我的线性探测的ADT中,我有一个函数def insert(),它从我的主脚本中调用以下函数:

def insertHashTable(  loadNum, hashTable  ):
    i = 0
    while i < ((loadNum*size)-1):
        hashTable.insert(data[i],data[i])
        i = i + 1
    return hashTable 

错误本身来自于从insertHashTable()

调用的此函数
def insert( self, key, value ):
    ( found, slot ) = self._findSlot( key ) #ERROR HERE
    if not found :
        self._table[slot] = _MapEntry( key, value ) #custom datatype
        self._count += 1
    return not found

我在这段代码的第二行得到了非类型错误。最后,_findSlot()如下:

def _findSlot( self, key ):        
    startLoc = self._hash1( key )

    self.slotsAccessed += 1
    if self._table.__getitem__( startLoc ) == None:
        return (False, startLoc)

    else:
        c = 0
        while (c+startLoc) < (self._size -1):
            if self._table[startLoc+c] == None:
                return (False, startLoc+c) 
            elif self._table.__getitem__( startLoc ).key == key:
                return (True, startLoc+c) 
            c = c + 1
            self.slotsAccessed += c

我不确定为什么insertHashTable()函数会出现这样的错误,因为密钥没有发生迭代。

但我知道我的哈希表有“无”#39;在表初始化的每个槽中,可能存在一些问题吗?

1 个答案:

答案 0 :(得分:3)

您的_findSlot(self, key)函数可以在没有return语句的情况下完成。 (具体来说,如果您的while条件变为false并且循环结束,则会发生这种情况。)在这种情况下,函数将返回None。如果您尝试分配(found, slot)None,则会收到错误Nonetype is not iterable

你可能需要弄清楚你的函数在当前返回None的情况下应返回的内容。