2015-02-08 80 views
0

由於此錯誤,我無法繼續執行下一個任務。我已經搜索了有關錯誤,並做了別人的建議,但它不適用於我的代碼。所以我希望有人能幫助我。這裏是我的代碼:UnboundLocalError:賦值之前引用的局部變量'QN_WA'Python 3.4

if self.techskills == 11: 
     c = con.execute("SELECT Centroid FROM Centroid WHERE ItemID = 25") 
     TS_centroid = c.fetchone()[0] 

     TS_AA = (min(a1, a2) * TS_centroid) + (pow(a3,2)) 
     TS_BB = (min(a1, a2) + a3) 
     TS_WA = TS_AA/TS_BB 

elif self.techskills == 12: 
     c = con.execute("SELECT Centroid FROM Centroid WHERE ItemID = 24") 
     TS_centroid = c.fetchone()[0] 

     TS_AA = (min(a1, a2) * TS_centroid) + (pow(a3,2)) 
     TS_BB = (min(a1, a2) + a3) 
     TS_WA = TS_AA/TS_BB 
if self.qualityofwork == 11: 
     c = con.execute("SELECT Centroid FROM Centroid WHERE ItemID = 25") 
     QL_centroid = c.fetchone()[0] 

     QL_AA = (min(a4, a5) * QL_centroid) + (pow(a6,2)) 
     QL_BB = (min(a4, a5) + a6) 
     QL_WA = QL_AA/QL_BB 

elif self.qualityofwork == 12: 
     c = con.execute("SELECT Centroid FROM Centroid WHERE ItemID = 24") 
     QL_centroid = c.fetchone()[0] 

     QL_AA = (min(a4, a5) * QL_centroid) + (pow(a6,2)) 
     QL_BB = (min(a4, a5) + a6) 
     QL_WA = QL_AA/QL_BB 
overall = (TS_WA + QL_WA)/2 
    print(overall) 

我只是縮短了代碼,使其簡短。我得到這個代碼:

Traceback (most recent call last): 


    overall = (TS_WA + QL_WA)/2 
UnboundLocalError: local variable 'QL_WA' referenced before assignment 

回答

2

如果你的任何陳述不評估爲True,QL_WA永遠不會被定義。您需要在if檢查之外設置默認值,或者在語句正文中移動overall = (TS_WA + QL_WA)/2

如果self.qualityofwork既不是11也不是12,那麼它永遠不會被分配,您可以按照我提到的設置一個默認值,或者在其中爲其賦值,然後分配overall = (TS_WA + QL_WA)/2

如果您希望self.qualityofwork始終爲11或12,那麼您在之前的代碼中存在一處錯誤。

你可以將其設置爲None

QL_WA = None 
if self.techskills == 11: 
    ..... 

然後使用if QL_WA is not None:overall = (TS_WA + QL_WA)/2

-1

UnboundLocalError出現在三種不同的條件下。
條件1;正如前面的帖子所述,這段代碼會產生錯誤。

'a' in globals() 
False 
def f(): 
    if False: 
    a=1 
    print a 
f() # UnboundLocalError 

的時候Python有解析的標識符,如果塊它已經學會了名,但是referrs沒有物體上面的「A」。因此在運行時訪問時會產生錯誤。

條件2;以上的修改版本。

a=0 
'a' in globals() 
True 
def f(): 
    if False: 
    a=1 
    print a 
f() # UnboundLocalError 

如果我們想使「」本地當「如果」條件爲真,否則不,它可以被編碼如下;

if 'a' not in locals(): 
    global a 
print a 

條件3; Python 3中

'a' in globals() 
False 
def f1(): 
    a=1 
    def f2(): 
    a += 1 # 'a' is non-local and non-global 
    f2() 
f1() # UnboundLocalError 

在這裏做 '一' global a觸發器 'NameErro',因爲'a' in globals()False。製作'a'nonlocal a可以訪問'f1'中的'a'。 即使'a' in globals()True,nonlocal只涉及外部範圍。

+0

它在一個函數中,所以它會是一個UnboundLocalError。全局與它無關 – 2015-02-08 18:30:21

+0

'if'引用'self'但你說它是在一個函數中。即使它是在一個函數從未分配變量獲取NameError。 – 2015-02-08 19:28:15

+0

在內部作用域中分配給先前在外部作用域中分配的var會使作用域的局部變量爲var。訪問也很好,它會得到最後的分配。 **在轉讓之前引用**錯誤意味着它是對本地一個礦石的有意義的引用。 – 2015-02-08 19:45:09

相關問題