2013-12-22 111 views
1

我收到錯誤...變量賦值之前引用 - Python的

a = a + b 
UnboundLocalError: local variable 'a' referenced before assignment 

我不明白爲什麼,如果我已經在開始分配兩個變量a和b發生錯誤。

from tkinter import * 

a = 10 
b = 12 
def stopProg(e): 
    root.destroy() 

def addNumbers(e): 
    a = a + b 
    label1.configure(text= str(a)) 

root=Tk() 
button1=Button(root,text="Exit") 
button1.pack() 
button1.bind('<Button-1>',stopProg) 
button2=Button(root,text="Add numbers") 
button2.pack() 
button2.bind('<Button-1>',addNumbers) 
label1=Label(root,text="Amount") 
label1.pack() 

root.mainloop() 

回答

5

每當您修改函數內的全局變量時,您需要首先將該變量聲明爲全局變量。

所以,你需要爲全局變量a做到這一點,因爲你修改它裏面addNumbers

def addNumbers(e): 
    global a 
    # This is the same as: a = a + b 
    a += b 
    # You don't need str here 
    label1.configure(text=a) 

這裏是關於global關鍵字的引用。


同時,我想指出,如果你使用command選項Button你的代碼可以加以改進:

from tkinter import * 

a = 10 
b = 12 
def stopProg(): 
    root.destroy() 

def addNumbers(): 
    global a 
    a += b 
    label1.configure(text=a) 

root=Tk() 
button1=Button(root, text="Exit", command=stopProg) 
button1.pack() 
button2=Button(root, text="Add numbers", command=addNumbers) 
button2.pack() 
label1=Label(root, text="Amount") 
label1.pack() 

root.mainloop() 

從未有一個很好的理由在地方使用綁定command選項。

+0

出所有的我都去了,我從來沒有顯示這個講座。非常感謝你! – user3080274

+1

@ user3080274 - 很高興爲您效勞!請不要忘記[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – iCodez

+0

我可以問在這裏什麼是'e' - 'def stopProg(e)'?謝謝。 –

1

您正在修改全局變量。默認情況下,你可以閱讀從全局變量值,不宣而他們作爲global,但要修改它們,你需要將它們申報爲global這樣

global a 
a = a + b 
相關問題