Python 分配错误前引用的局部变量

Python 分配错误前引用的局部变量,python,pygame,Python,Pygame,我对编码非常陌生,正在尝试制作一个我可以称之为自己的游戏。我不理解错误的含义,但以下是我的代码: import pgzrun import math import random WIDTH = 800 #5 HEIGHT = 600 CENTER_X = WIDTH/2 CENTER_Y = HEIGHT/2 CENTER = (CENTER_X, CENTER_Y) FONT_COLOR = (221, 160, 221) #10 ozo

我对编码非常陌生,正在尝试制作一个我可以称之为自己的游戏。我不理解错误的含义,但以下是我的代码:

import pgzrun
import math
import random

WIDTH = 800                       #5
HEIGHT = 600
CENTER_X = WIDTH/2
CENTER_Y = HEIGHT/2
CENTER = (CENTER_X, CENTER_Y)
FONT_COLOR = (221, 160, 221)      #10
ozol = 0

game_over = False

ozolith = Actor("ozolith")        #15

def draw():
    screen.clear()
    ozolith.draw()
    draw_counters(ozol)           #20

def place_ozolith():
    ozolith.x = CENTER_X
    ozolith.y = CENTER_Y
                                  #25
def draw_counters(ozol):
    screen.draw.text(str(ozol), fontsize=40, center=CENTER, color=FONT_COLOR)

def on_mouse_down(pos):
    if ozolith.collidepoint(pos): #30
        ozol += 1
        place_ozolith
    else:
        quit()
                                  #35
place_ozolith

pgzrun.go()
这是错误消息

Traceback (most recent call last):
  File "C:\Program Files\Python38\python-games\GameCraft\GameCraft.py", line 38, in <module>
    pgzrun.go()
  File "C:\Program Files\Python38\lib\site-packages\pgzrun.py", line 31, in go
    run_mod(mod)
  File "C:\Program Files\Python38\lib\site-packages\pgzero\runner.py", line 113, in run_mod
    PGZeroGame(mod).run()
  File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 217, in run
    self.mainloop()
  File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 247, in mainloop
    self.dispatch_event(event)
  File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 172, in dispatch_event
    handler(event)
  File "C:\Program Files\Python38\lib\site-packages\pgzero\game.py", line 164, in new_handler
    return handler(**prepped)
  File "C:\Program Files\Python38\python-games\GameCraft\GameCraft.py", line 31, in on_mouse_down
    ozol += 1
UnboundLocalError: local variable 'ozol' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\Python38\python games\GameCraft\GameCraft.py”,第38行,在
pgzrun.go()
文件“C:\Program Files\Python38\lib\site packages\pgzrun.py”,第31行,在go中
运行模式(mod)
文件“C:\Program Files\Python38\lib\site packages\pgzero\runner.py”,第113行,在run\u mod中
PGZeroGame(mod.run)()
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第217行,正在运行
self.mainloop()
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第247行,在mainloop中
自调度事件(事件)
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第172行,在dispatch\u事件中
处理程序(事件)
文件“C:\Program Files\Python38\lib\site packages\pgzero\game.py”,第164行,在新的\u处理程序中
返回处理程序(**已准备就绪)
文件“C:\Program Files\Python38\python games\GameCraft\GameCraft.py”,第31行,鼠标按下
臭氧+=1
UnboundLocalError:赋值前引用的局部变量“ozol”

当我点击粘贴在左上角的图像时就会发生这种情况。

尝试通过

    global ozol
    ozol = 0
把全球臭氧层b4你定义臭氧层,看看是否有效

    ozol += 1
相当于

    ozol = ozol + 1

但是
ozol
没有初始值,因此出现错误。

谢谢!这为我节省了很多时间:-)这对全局范围没有帮助,因为它已经是全局范围了。。。这会起作用。是的,谢谢,但是图像不像我想要的那样在中间。to@Swagtonio是的,这是另一个无关的错误。你实际上并不是在给place\u ozolith打电话,也就是说,你需要
place\u ozolith()
非常感谢你,我还在犯新手错误的阶段。这将作为以后的课程。您可以在函数中添加
global
。但最好避免可变的全球状态。相反,将信息作为参数传递到函数中,并将调用方所需的对象返回给调用方。有一个原因是赋值默认为local,这是为了阻止可变的全局状态。
ozol
将默认为local,并且不会使用全局
ozol
。实际上,在JS中,如果函数中没有变量声明,这将默认为globalPython当然没有声明,所以将赋值默认为local可能更为实用