簡體   English   中英

如何解決此錯誤“UnboundLocalError:分配前引用的局部變量'a'”

[英]How can I fix this error “UnboundLocalError: local variable 'a' referenced before assignment”

嗨,我正在尋找解決這個問題的方法,我已經聲明了一個全局 object 但是當我嘗試在 function 中使用它時,編譯器給了我這個錯誤消息“UnboundLocalError: local variable 'a' referenced before assignment”我不'不明白為什么,我將其聲明為全局,因此該錯誤沒有任何意義。 我使用了一個名為 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()

在記號tick中將a聲明為全局變量。

def tick():
    global a
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM