我有曲棍球比賽的勝利、平局、輸球變數。顯然,根據游戲的最終結果,這些變數中只有一個是 True。出于這個原因,我在 try and except 中創建了它們:通過。
現在我只想列印這些變數中的一個(True 變數,例如 Victory,因為根據對曲棍球比賽結果的抓取,Victory 變為 True),但是UnboundLocalError: local variable 'Victory' referenced before assignment當我搜索列印 True 變數時出現錯誤,因為在分配之前已經命名了 Victory。鑒于問題的簡單性,我只報告對解決方案有用的部分:
也許我不應該使用串列
#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 / except 因為在勝利、平局、失敗之間只有一 (1) 個變數為真。這兩個 False 變數將被識別為錯誤,因為我之前在 if / else 條件中創建了 Point_Team_A 和 Point_Team_B。隨后我使用 Point_Team_A 和 B 創建上面的 3 個變數。例如,如果曲棍球比賽的結果是 7-3,則表示 A 隊獲勝,因為勝利 = Point_Team_A> Point_Team_B。因此 Draw and Lose 將被 Python 識別為錯誤,為此使用 try / except。
uj5u.com熱心網友回復:
Python 變數屬于以下兩類之一:global和local。如果變數是在檔案范圍內定義的,那么它就是全域變數。相反,區域變數是在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呼叫它之前作業得很好。因為其中的條件陳述句都沒有check_age()定義infowhen的值age是 18,info所以當使用值 18 呼叫函式時不會有值(未系結)。因此,info稍后通過 return 陳述句訪問會引發UnboundLocalError
在您的特定情況下,try定義一個新塊(或范圍),您可以在其中對幾個變數進行一些分配。您稍后會在封閉范圍內訪問這些變數。
唯一直接明顯的原因UnboundLocalError是在您的塊中引發了例外(特別是在第一行),該例外在您的try塊中被靜音,導致未分配值。因此,試圖通過會引發上述例外passexceptVictoryVictorylist = [Victory, Draw, Lose]。這可能僅意味著在您的塊>中的第一行傳遞給操作員的值存在問題。try可能沒有為至少一個值定義運算子。
底線是檢查您抓取的資料,以確保您傳遞了正確的值。
uj5u.com熱心網友回復:
做就是了
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
uj5u.com熱心網友回復:
當 try 塊中出現例外時,在 try 塊中創建的變數在外部 try 塊中將不可用,因此創建一個變數并在外部 try 塊中或內部 except 中初始化它
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://www.uj5u.com/qita/454225.html
標籤:Python python-3.x 列表 变量 布尔值
