TypeError: 'NoneType' object is not subscriptable when testing for contains function?

TypeError: 'NoneType' object is not subscriptable when testing for contains function?

嗨,我是 Python 的新手,我正在 Python 中实现散列 table,并且正在对我的包含 method.This 进行单元测试是我的包含方法

 def __contains__(self,key):
    position=self.hash_value(key)
    for _ in range(self.table_size):
        if self.array[position][0]==key:
            return True
        elif self.array[position] is None:
            return False
        position=(position+1)%self.table_size
    return False

所以我这样进行单元测试:

 def testContains(self):
    my_table=HashTableLinear(3)
    my_table["Julian"] = "FIT1008"
    my_table["Phillip"] = "FIT1045"
    self.assertEqual("a" in my_table,False)
    self.assertEqual("Julian" in my_table,True)

但是我得到一个错误:

 if self.array[position][0]==key:
 TypeError: 'NoneType' object is not subscriptable

我无法弄清楚我的 contains 方法有什么问题?我该如何解决?任何帮助将不胜感激!

这里的问题是 self.array[position]None 值,所以你可以做的是像这样改变条件的顺序:

for _ in range(self.table_size):
    if self.array[position] is None:
        return False
    elif self.array[position][0]==key:
        return True
    position=(position+1)%self.table_size

这里会先检查数组的值,如果不是none就会转到第二个条件。你的代码中的问题是当它检查第一个条件时应该有一些数组值,它不应该是 none,如果它是 none 它会抛出你得到的错误。