【问题标题】:TypeError: 'NoneType' object is not subscriptable when testing for contains function?TypeError:测试包含函数时,'NoneType' 对象不可下标?
【发布时间】:2018-05-24 12:04:30
【问题描述】:

您好,我是 Python 新手,我正在 Python 中实现一个哈希表,我正在对我的 contains 方法进行单元测试。这是我的 contains 方法

 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 方法出了什么问题?我该如何解决?任何帮助将不胜感激!

【问题讨论】:

    标签: python unit-testing hashtable


    【解决方案1】:

    这里的问题将是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,它会抛出你得到的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2021-12-14
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多