我赢了,平局,输了一场曲棍球比赛。显然,根据游戏的最终结果,这些变量中只有一个是True。出于这个原因,我在一次尝试中创建了它们,除了: pass。
现在,我只想打印这些变量中的一个(例如,胜利,因为胜利是基于对曲棍球比赛结果的刮取而变成真实的),但是当我搜索打印True变量时,我会得到错误UnboundLocalError: local variable 'Victory' referenced before assignment,因为胜利在分配之前已经命名了。鉴于问题的简单性,我只报告对决议有用的部分:
也许我不应该用单子
#scraping and assignment of Point_Team_A and Point_Team_B
...
try:
Victory = Point_Team_A > Point_Team_B
Draw = Point_Team_A == Point_Team_B
Lose = Point_Team_A < Point_Team_B
except:
pass
result=[Victory, Draw, Lose] #great problem is here
print (*filter(None, result), sep='\n') #and here例如,如果结果是胜利,我希望得到输出:Victory
注意:我使用try /除非只有一个变量才是胜利者、平局、输家之间的真变量。这两个假变量将被识别为错误,因为我以前在if / Point_Team_B条件下创建了Point_Team_B。随后,我使用Point_Team_A和B来创建上面的3个变量。例如,如果一场曲棍球比赛的结果是7-3,那就意味着A队赢了,因为胜利= Point_Team_A> Point_Team_B。因此,Python会将平局和输球看作是一个错误。
发布于 2022-04-01 08:38:29
Python变量分为两类:全局和本地。如果变量是在文件作用域中定义的,则该变量是全局的。相反,局部变量是在python块中定义的变量。对于python块,我指的是引入缩进分隔的新代码块的任何python构造(特别是函数定义)。
与其他语言(例如C++)不同,可以从外部范围访问本地python变量。这就是通常引发UnboundLocalError异常的原因。考虑以下代码:
def check_age(age):
if age < 18:
info = 'too young'
elif age > 18:
info = 'too old'
return info check_age()可以正常工作,直到用值18调用为止。由于在UnboundLocalError为18时,check_age()中的任何条件语句都不定义info的值,因此在调用值18的函数时,info不会有一个值(未绑定)。
在您的特定情况下,try定义了一个新的块(或作用域),您可以在其中对几个变量执行一些赋值。稍后,您将在一个封闭范围内访问这些变量。UnboundLocalError try 块(特别是在第一行)中引发的异常,由 except 块中的 pass 沉默,导致E 243 Victory E 147不被分配值。因此,试图通过Victory list = [Victory, Draw, Lose] 访问会引发上述异常。这可能只意味着传递给>操作符的值在try块中的第一行存在问题。可能没有为至少一个值定义运算符。
底线是检查您刮过的数据,以确保您正在传递正确的值。
发布于 2022-04-01 05:56:58
就这么做
if a_points > b_points:
print('victory')
elif a_points == b_points:
print('draw')
else:
print('defeat')当代码正常工作时,实际上只会打印True。
如果您想要另一种方法重现您所看到的错误,请尝试如下:
def f():
try:
x = 1 / 0
except ZeroDivisionError:
pass
print(x)所发生的事情是,python解释器知道名称x存在于作用域中,但它从未绑定到任何东西(因为异常发生在赋值之前)。所以你得到了UnboundLocalError
发布于 2022-04-01 05:56:37
当try块中有异常时,在try块中创建的变量将在外部try块中不可用,因此创建一个变量并在外部try块或inside中初始化它。
Victory = Draw = Lose = False
try:
Victory = Point_Team_A > Point_Team_B
Draw = Point_Team_A == Point_Team_B
Lose = Point_Team_A < Point_Team_B
except:
pass
result=[Victory, Draw, Lose]
print (*filter(None, result), sep='\n')https://stackoverflow.com/questions/71702238
复制相似问题