TypeError: объект 'NoneType' не может быть подписан при проверке функции содержит? - PullRequest
0 голосов
/ 24 мая 2018

Привет, я новичок в Python, и я реализую хэш-таблицу в Python, и я делаю модульный тест для моего метода содержит. Это мой метод содержит

 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

Я не могу понять, что не так с моим методом содержимого? Как это исправить? ЛюбойСпасибо за помощь, спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

Здесь проблема будет равна None значению self.array[position], поэтому вы можете изменить порядок условий следующим образом:

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, оно перейдет во второе условие.Проблема в вашем коде заключается в том, что когда он проверяет первое условие, должно быть какое-то значение для массива, оно не должно быть ни одним, если это не так, оно выдаст полученную ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...