我得到UnboundLocalError:在下面的给定代码上赋值之前引用了本地变量"prev">
class Node:
def __init__(self,value,next=None):
self.value=value
self.next=next
class MyList:
def __init__(self,a):
self.head=None
tail=None
for i in a:
n=Node(i,None)
if self.head is None:
self.head=n
tail=n
else:
tail.next=n
tail=n
def showList(self):
n=self.head
if n==None:
print("Empty list")
while n!=None:
print(n.value)
n=n.next
def isEmpty(self):
n=self.head
if n is None:
print("True")
else:
print("False")
def clear(self):
while(self.head!=None):
temp=self.head
self.head=self.head.next
temp=None
def insert(self, newElement):
node = self.head
while node:
if node.value == newElement:
print("Value already exists")
return False
prev = node
node = node.next
if prev:
prev.next = Node(newElement)
else:
self.head = Node(newElement)
return True
list1 = [1, 2, 3, 4, 5]
linklist = MyList(list1)
linklist.showList()
linklist.isEmpty()
linklist.clear()
linklist.showList()
linklist.insert(6)
linklist.showList()
如果我删除clear(self(函数,代码运行得很好,但如果没有删除,insert(self,newElement(函数中会显示一个错误。显示
Traceback (most recent call last):
File "c:UsersacerDesktopUntitled-1.py", line 65, in <module>
linklist.insert(6)
File "c:UsersacerDesktopUntitled-1.py", line 51, in insert
if prev:
UnboundLocalError: local variable 'prev' referenced before assignment
PS C:Usersacer>
在insert
方法中,需要在进入循环之前将prev
初始化为None
。否则,如果循环在第一次迭代之前退出(即,如果self.head
是None
(,那么prev
将是未定义的,这就是Python告诉您的。只需添加这样的初始化:
def insert(self, newElement):]
prev = None
node = self.head
while node:
...
在insert()
方法中,如果未进入while
循环,则不会初始化prev
变量。
您需要做的是在insert()
方法开始时将其初始化为某个值,或者确保始终进入while
循环。