首页 > 解决方案 > Python UnboundLocalError:赋值前引用的局部变量

问题描述

我很困惑。player1_head与我在下面的代码中打印的其他变量相比,有什么不同?据我所知,它的行为应该与其他行为相同——它是在全局范围内声明的,不是吗?我不认为这是一个错字。

UnboundLocalError:分配前引用的局部变量“player1_head”

from turtle import *
from random import randint
from utils import square, vector

player1_xy = vector(-100, 0)
player1_aim = vector(4, 0)
player1_body = []
player1_head = "It looks like I'm assigning here."

def draw():
    "Advance player and draw game."
    print("xy: ", player1_xy)
    print("head: ", player1_head)
    print("body: ", player1_body)
    player1_xy.move(player1_aim)
    player1_head = player1_xy.copy()
    player1_body.append(player1_head)
    square(player1_xy.x, player1_xy.y, 3, 'red')
    update()
    ontimer(draw, 200)

setup(420, 420, 370, 0)
hideturtle()
tracer(False)

draw()
done()

标签: pythonglobal-variables

解决方案


因为您未能将其声明player1_headglobal,所以在该draw()函数中,您似乎在打印出局部变量player1_head之前它有一个值:

print("head: ", player1_head)
# ...
player1_head = player1_xy.copy()

而是这样做:

def draw():
    """ Advance player and draw game. """

    global player1_head

    print("xy: ", player1_xy)
    print("head: ", player1_head)
    print("body: ", player1_body)
    player1_xy.move(player1_aim)
    player1_head = player1_xy.copy()
    player1_body.append(player1_head)

    square(player1_xy.x, player1_xy.y, 3, 'red')

    update()
    ontimer(draw, 200)

推荐阅读