[英]why do i keep getting this error and how do i solve it
所以我有这个庞大的 python 代码,但我无法让它工作。 它一直在说:
UnboundLocalError:分配前引用的局部变量“secondnum”
这个问题现在实际上已经解决了,感谢您的帮助,但该程序似乎仍然无法正常工作。 我没有收到任何错误,但它应该是秒表,但我无法更改精灵的外观。
我试图用谷歌搜索,但似乎没有人遇到和我一样的问题。
请帮忙。 请对我有点耐心,我只有 14 岁
import pygame, sys
import time
import threading
secondnum = "0"
tensecondnum = "0"
minutenum = "0"
tenminutenum = "0"
secondimage = {"0": "0.png", 1: "1.png", 2: "2.png", 3: "3.png", 4: "4.png", 5: "5.png", 6:"6.png", 7: "7.png"
}
tensecondimage = {"0": "0.png"
}
minuteimage = {"0": "0.png"
}
tenminuteimage = {"0": "0.png"
}
def background():
while True:
global secondnum
global tensecondnum
global minutenum
global tenminutenum
time.sleep(1)
secondnum = "1"
def foreground():
global numbers1_group
global numbers2_group
global numbers3_group
global numbers4_group
global screen
class Colon(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y):
super().__init__()
self.image = pygame.image.load("kolon.png")
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers1(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers2(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers3(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers4(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
# General setup
pygame.init()
clock = pygame.time.Clock()
# Game Screen
screen_width = 700
screen_height = 350
screen = pygame.display.set_mode((screen_width,screen_height))
background = pygame.image.load("BG.png")
pygame.mouse.set_visible(True)
# Colon
colon = Colon(350, 175)
colon_group = pygame.sprite.Group()
colon_group.add(colon)
# Numbers1
numbers1 = Numbers1(140, 175, tenminuteimage["0"])
numbers1_group = pygame.sprite.Group()
numbers1_group.add(numbers1)
# Numbers2
numbers2 = Numbers2(280, 175, minuteimage["0"])
numbers2_group = pygame.sprite.Group()
numbers2_group.add(numbers2)
# Numbers3
numbers3 = Numbers3(420, 175, tensecondimage["0"])
numbers3_group = pygame.sprite.Group()
numbers3_group.add(numbers3)
# Numbers4
numbers4 = Numbers4(560, 175, secondimage[secondnum])
numbers4_group = pygame.sprite.Group()
numbers4_group.add(numbers4)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
screen.blit(background,(0,0))
colon_group.draw(screen)
numbers1_group.draw(screen)
numbers2_group.draw(screen)
numbers3_group.draw(screen)
numbers4_group.draw(screen)
clock.tick(60)
b = threading.Thread(name='background', target=background)
f = threading.Thread(name='foreground', target=foreground)
b.start()
f.start()
请阅读https://stackoverflow.com/help/minimal-reproducible-example关于提出更好的问题。 此外,包括 python 版本和询问错误时的完整回溯。
无论如何,以下内容显示了您所做的事情和解决方案。
s = 0
def bad():
s = s+1
def good():
global s
s = s+1
good()
bad()
印刷
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
bad()
File "<pyshell#7>", line 2, in bad
s = s+1
UnboundLocalError: local variable 's' referenced before assignment
在 3.11 中,一个月后,消息更改为“无法访问与值无关的局部变量 's'”,我们希望更清楚。
Python works that way, that if Python find a variable being assign in some function it defines this variable as local and stops looking for it to be assign somewhere out of the function. 要修复它,您最好在 function 背景中设置第二个全局变量。
import pygame, sys
import time
import threading
global tensecondnum
global minutenum
global tenminutenum
secondnum = "0"
tensecondnum = "0"
minutenum = "0"
tenminutenum = "0"
secondimage = {"0": "0.png", 1: "1.png", 2: "2.png", 3: "3.png", 4: "4.png", 5: "5.png", 6:"6.png", 7: "7.png"
}
tensecondimage = {"0": "0.png"
}
minuteimage = {"0": "0.png"
}
tenminuteimage = {"0": "0.png"
}
def background():
while True:
global secondnum
time.sleep(1)
secondnum = str(int(secondnum) + 1)
def foreground():
class Colon(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y):
super().__init__()
self.image = pygame.image.load("kolon.png")
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers1(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers2(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers3(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
class Numbers4(pygame.sprite.Sprite):
def __init__(self, pos_x, pos_y, number):
super().__init__()
self.image = pygame.image.load(number)
self.rect = self.image.get_rect()
self.rect.center = [pos_x, pos_y]
# General setup
pygame.init()
clock = pygame.time.Clock()
# Game Screen
screen_width = 700
screen_height = 350
screen = pygame.display.set_mode((screen_width,screen_height))
background = pygame.image.load("BG.png")
pygame.mouse.set_visible(True)
# Colon
colon = Colon(350, 175)
colon_group = pygame.sprite.Group()
colon_group.add(colon)
# Numbers1
numbers1 = Numbers1(140, 175, tenminuteimage["0"])
numbers1_group = pygame.sprite.Group()
numbers1_group.add(numbers1)
# Numbers2
numbers2 = Numbers2(280, 175, minuteimage["0"])
numbers2_group = pygame.sprite.Group()
numbers2_group.add(numbers2)
# Numbers3
numbers3 = Numbers3(420, 175, tensecondimage["0"])
numbers3_group = pygame.sprite.Group()
numbers3_group.add(numbers3)
# Numbers4
numbers4 = Numbers4(560, 175, secondimage[secondnum])
numbers4_group = pygame.sprite.Group()
numbers4_group.add(numbers4)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
screen.blit(background,(0,0))
colon_group.draw(screen)
numbers1_group.draw(screen)
numbers2_group.draw(screen)
numbers3_group.draw(screen)
numbers4_group.draw(screen)
clock.tick(60)
b = threading.Thread(name='background', target=background)
f = threading.Thread(name='foreground', target=foreground)
b.start()
f.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.