AttributeError: 'NoneType' object has no attribute '...'

AttributeError: 'NoneType' object has no attribute '...'

当我遇到这个错误时,我正在 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 的方法,您可以在第二个打印中清楚地看到,但我不明白为什么在第一个条件中它总是中断。

提前致谢。

解决方法: 必须考虑两个 DList 的长度,而不是获取两个值之一 'Nonetype'。这解决了更改 OR 为 AND,稍后检查哪个不是 'Nonetype' 以完成合并

这会检查是否有一个是非None,所以如果一个是,而不是另一个,则进入循环

while (selfPatient or otherPatient)

如果你想访问两个 elem 属性,那么 both 需要是非 None,需要你更改 orand

否则,当只有一个是 None 时,您需要在 if 语句之前单独处理逻辑,然后可能会打破循环,以便达到 return。将现有逻辑的其余部分包装在 if selfPatient and otherPatient 中仍然不会有什么坏处,因为您正在使用来自两个

的属性

至于为什么变成None,那要看你链表迭代的逻辑了