如何解决此错误“ UnboundLocalError:分配前引用的本地变量'a'”

问题描述 投票:0回答:1

[嗨,我正在寻找一个解决此问题的方法,我已经声明了一个全局对象,但是当我尝试在函数中使用它时,编译器会向我显示此错误消息“ UnboundLocalError:赋值之前引用的本地变量'a'”我不明白为什么,我将其声明为全局,因此对该错误没有任何意义。我使用了一个名为g2d的免费模块来对某些精灵进行动画处理这是代码:

    import g2d
    from actor import Actor, Arena
    sprites = g2d.load_image("moon-patrol.png")
    bckd = g2d.load_image("moon-patrol-bg.png")
    arena = Arena((700, 500))

    class Rover(Actor):

        def __init__(self, arena, pos):
            self._x, self._y = pos
            self._w, self._h = 35, 25
            self._dx, self._dy = 0, 0
            self._arena_w, self._arena_h = arena.size()
            self._ground = 100
            self._jump = -10
            arena.add(self)

        def move(self):
            self._y += self._dy
            if self._y < 0:
                self._y = 0
            elif self._y + self._dy > self._arena_h - self._ground:
                self._y = self._arena_h - self._ground
            else:
                self._dy += 0.4

            self._x += self._dx
            if self._x < 0:
                self._x = 0
            elif self._x > self._arena_w - self._ground:
                self._x = self._arena_w - self._ground

        def go_up(self):
            if self._y >= self._arena_h - self._h - self._ground:
                self._dy = self._jump

        def go_right(self):
            self._dx = 10

        def go_left(self):
            self._dx = -10

        def stay(self):
            self._dy, self._dx = 0, 0

        def symbol(self):
            return 210, 155, self._w, self._h

        def position(self):
            return self._x, self._y, self._w, self._h

    a = Rover(arena, (100, 400))

    def tick():
        r, r1, r2 = 0, 0, 0
        ARENA_W, ARENA_H = arena.size()

        g2d.clear_canvas()
        rel_x = r % ARENA_W
        g2d.draw_image_clip(bckd,(0, 100, 512, 150),(rel_x - ARENA_W,0,700,500))

        if rel_x < ARENA_W:
            g2d.draw_image_clip(bckd,(0, 100, 512, 150),(rel_x,0,700,500))
        r -= 5
        rel_x1 = r % ARENA_W
        g2d.draw_image_clip(bckd,(0, 385, 512, 125),(rel_x1 - ARENA_W,300,700,200))

        if rel_x1 < ARENA_W:
            g2d.draw_image_clip(bckd,(0, 385, 512, 125),(rel_x1,300,700,200))
        r1 -= 3
        rel_x2 = r % ARENA_W
        g2d.draw_image_clip(bckd,(0, 513, 512, 125),(rel_x2 - ARENA_W,400,700,100))

        if rel_x2 < ARENA_W:
            g2d.draw_image_clip(bckd,(0, 513, 512, 125),(rel_x2,400,700,100))
        r1 -= 1

        if a.symbol != (0, 0, 0, 0):
            g2d.draw_image_clip(sprites, a.symbol(), a.position())

        if g2d.key_pressed("Spacebar"):
            a.go_up()

        if g2d.key_pressed("ArrowRight"):
            a.go_right()

        if g2d.key_pressed("ArrowLeft"):
            a.go_left()

        if (g2d.key_released("ArrowRight") or g2d.key_released("ArrowLeft")):
            a.stay()

        arena.move_all()

        for a in arena.actors():    
## Here is where the compiler give me the error
## "UnboundLocalError: local variable 'a' referenced before assignment
            if a.symbol != (0, 0, 0, 0):
                g2d.draw_image_clip(sprites, a.symbol(), a.position())


    def main():    
        g2d.init_canvas(arena.size())
        g2d.main_loop(tick)
    main()
python compiler-errors python-idle
1个回答
0
投票

a函数中将tick声明为全局变量。

© www.soinside.com 2019 - 2024. All rights reserved.