简体   繁体   中英

local variable 'statement' referenced before assignment

I am currently creating a while loop in python and I got this problem:

local variable 'statement' referenced before assignment

this is my code:

    while (statement == True):
        self.headNode = settings.EMPTY_UUID
        try:
            lastNode = Task.objects.get(next = self.headNode)
            self.headNode = lastNode.id
            statement = True
        except:
            statement = False

I am worried if I initialize statement = True before while statement because it might become an infinite loop

For instance, this is data of Task.objects:

id    name     next
001   task1    002
002   task2    003
003   task3    000

I would like to get the Id of the root task which should be 001

The comments already point you to the answer, but here's a (more Pythonic) way to code this:

while True:
    self.headNode = settings.EMPTY_UUID
    try:
        lastNode = Task.objects.get(next=self.headNode)
        self.headNode = lastNode.id
        break
    except Task.DoesNotExist:
        break

Even if you'd need the value of statement after the while loop, you don't need the variable: statement is obviously False at that point.

Note that I've also changed the except statement. It's my assumption you want to catch the error that's raised when the relevant Task object does not exist, but it's generally bad to have a bare, catch-all, except.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM