[英]Variable referenced before assignment - 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()
每当在函数内部修改全局变量时,都需要首先将该变量声明为全局变量。
因此,您需要对全局变量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
关键字的参考。
另外,我想指出的是,如果您使用Button
的command
选项,则可以改进您的代码:
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
选项。
您正在修改全局变量。 默认情况下,您可以从全局变量中读取值,而无需将它们声明为global
,但是要修改它们,您需要像这样将它们声明为global
global a
a = a + b
这是你的答案:
这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。
请阅读: http : //docs.python.org/2/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.