[英]NoneType Error: Python Doubly Linked List
陷入因使用我的函數而導致的NoneType錯誤的解決方案中,將以下代碼添加並追加到一個空的Double_list類對象中。 最好的避免方法?
class Dbl_Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class Double_list:
def __init__(self): # Creates initial list w/ head and tail as None
self.head = None
self.tail = None
def add(self, item): # adds node to beginning/head of list
temp = self.head
self.head = Dbl_Node(item)
temp.prev = self.head
self.head.next = temp
def append(self, item): # adds node to end/tail of list
temp = self.tail
self.tail = Dbl_Node(item)
self.tail.prev = temp
temp.next = self.tail
您正在將head
和tail
初始化為None
,但是然后在插入第一個Dbl_Node
時嘗試在它們上設置prev
和next
成員。
def add(self, item):
temp = self.head # on the first call to "add", self.head is None
# (as set in __init__) so temp is now None
self.head = Dbl_Node(item) # create a new node and assign it to self.head
# this is fine
temp.prev = self.head # this says assign the new node in self.head to the "prev"
# member of temp, however temp is None so the temp.prev part
# throws the error
你應該檢查這種情況
def add(self, item): # adds node to beginning/head of list
temp = self.head
self.head = Dbl_Node(item)
if temp is not None:
temp.prev = self.head
另一種解決方案是從頭和尾的“虛擬”節點開始:
def __init__(self):
self.head = Dbl_Node(None)
self.tail = Dbl_Node(None)
self.head.next = self.tail
self.tail.prev = self.head
然后在這些節點之間插入項目
def add(self, item):
temp = self.head.next
self.head.next = Dbl_Node(item)
temp.prev = self.head.next
self.head.next.next = temp
盡管我發現這會使事情不必要地復雜化。
def append(self, item): # adds node to end/tail of list
temp = self.tail
self.tail = Dbl_Node(item)
self.tail.prev = temp
temp.next = self.tail
這將始終引發NoneType
異常,因為self.tail
最初是None
然后您self.tail
它的引用( None
)分配給temp
並嘗試將某些內容分配給None
。 不行
您可能需要首先為self.tail
分配一個新的對象引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.