python - “NoneType”对象没有属性“值”
问题描述
使用“delete_entire(self)”方法删除整个链表时。它不会引发任何属性错误。虽然上面的代码运行良好。它没有打印空白列表,而是给出了无属性错误。
class Node:
def __init__(self,value):
self.value = value
self.next = None
class CircularSinglyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def __iter__(self):
node = self.head
while True:
yield node
if node.next is self.head:
break
node = node.next
def insertion(self, value, location):
new_node = Node(value)
if self.head is None:
self.head = new_node
self.tail = new_node
self.tail.next = self.head
else:
if location == 0:
new_node.next = self.head
self.head = new_node
self.tail.next = new_node
elif location == -1:
self.tail.next = new_node
new_node.next = self.head
self.tail = new_node
else:
temp_node = self.head
index = 0
while index < location -1:
if temp_node.next is self.head:
break
temp_node = temp_node.next
index += 1
next_node = temp_node.next
temp_node.next = new_node
new_node.next = next_node
if new_node.next is self.head:
self.tail = new_node
#---------------------------------------------------------------------------------------------#
# deleting the entire linked list
def delete_entire(self):
self.head = None
self.tail.next = None
self.tail = None
cll = CircularSinglyLinkedList()
cll.insertion(2,1)
cll.insertion(3,2)
cll.insertion(5,3)
cll.insertion(6,4)
cll.insertion(0,0)
cll.insertion(10,-1)
print([node.value for node in call])
输出 = [0, 2, 3, 5, 6, 10]
cll.delete_entire()
print([node.value for node in call])
AttributeError:“NoneType”对象没有属性“值”
预期的输出是
[ ]
解决方案
__iter__()
即使列表为空,您的方法也总是产生一次,因为它yield node
在检查是否node
是之前会产生None
。当列表为空时,将产生None
,调用者将尝试使用None.value
。
您应该尽快停止node
循环None
。
def __iter__(self):
node = self.head
while node:
yield node
node = node.next
推荐阅读
- android - 我的移动应用在 Google Play 商店中是免费的还是付费的?
- git - 如何启用自定义合并驱动程序 - GitHub 中的 .gitattributes
- javascript - 如何使用按钮清除语义 UI React 中的多选下拉菜单?
- tsql - JOIN 中的 SELECT WHERE 语句
- ifc - 如何获得 IFC 窗台高度
- c# - 如何使用 Gmail 在 C# 中安排电子邮件?
- string - 我如何获得随机选择的字符串名称并仍然选择现有的子字符串而不以文本形式出现代码
- react-native - React Native 没有连接到 socket.io
- django - GeoDjango 获取到给定位置集的任何点的给定距离内的模型的所有记录
- regex - 如何重复正则表达式组直到字符串结束