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 它会抛出你得到的错误。
嗨,我是 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 它会抛出你得到的错误。