为什么我在这个代码中得到"UnboundLocalError"?



我得到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.headNone(,那么prev将是未定义的,这就是Python告诉您的。只需添加这样的初始化:

def insert(self, newElement):]
prev = None
node = self.head
while node:
...

insert()方法中,如果未进入while循环,则不会初始化prev变量。

您需要做的是在insert()方法开始时将其初始化为某个值,或者确保始终进入while循环。

相关内容

  • 没有找到相关文章

最新更新