Я работал с двусвязными списками в Python, когда столкнулся с этой ошибкой:
def merge(self,other):
mergedCenter = HealthCenter()
selfPatient = self._head
otherPatient = other._head
print(selfPatient.elem)
print(selfPatient.elem < otherPatient.elem)
while (selfPatient or otherPatient):
if selfPatient.elem < otherPatient.elem:
mergedCenter.addLast(selfPatient.elem)
selfPatient = selfPatient.next
elif selfPatient.elem > otherPatient.elem:
mergedCenter.addLast(otherPatient.elem)
otherPatient = otherPatient.next
else:
mergedCenter.addLast(selfPatient.elem)
selfPatient = selfPatient.next
otherPatient = otherPatient.next
return (mergedCenter)
Я получаю этот вывод:
Abad, Ana 1949 True 0
True
Traceback (most recent call last):
File "main.py", line 189, in <module>
hc3 = hc1.merge(hc2)
File "main.py", line 112, in merge
if selfPatient.elem < otherPatient.elem:
AttributeError: 'NoneType' object has no attribute 'elem'
Уже реализован метод для сравнения .elem, как вы можете ясно видеть на втором принте, но я не понимаю, почему в первом условном условии он продолжает ломаться.
Заранее спасибо.
Решение: Необходимо было учитывать длину обоих DLlist, чтобы не получить одно из обоих значений 'Nonetype'. Это решается заменой OR на AND и последующей проверкой того, какой из них не является «Nonetype», чтобы завершить слияние
.next
вызовов возвращает None - person OneCricketeer   schedule 02.04.2021selfPatient
илиotherPatient
— нет. - person John Gordon   schedule 02.04.2021and
вместоor
, чтобы проверить оба. - person MisterMiyagi   schedule 02.04.2021