到目前为止,每次运行此代码时,都会收到此错误:
Error message: 'UnboundLocalError: local variable 'rootent' referenced before assignment'
这是我一直在运行的代码: 我已经尝试过在功能上做出全面的全局性,并且我已经尝试将它作为一个没有运气的段落传递。 (更喜欢明确的答案/解释,因为我不是那么优秀的程序员(可能不理解你的答案))
class calculator():
def __init__(self):
def options():
fetch=float(rootent.get()) #Location of error
if fetch=='1':
def IEntry():
fetch=float(rootent.get())
fetch1=float(rootent1.get())
answer=fetch,'+',fetch1,'=',fetch1+fetch2
ansLabel=Label(root,text=answer).pack()
root=Tk()
root.title('Addition')
root.geometry('450x450+200+200')
rootlabel=Label(root,text='Enter first number').pack()
rootent=Entry()
rootent.pack()
rootlabel1=Label(root,text='Enter second number').pack()
rootent1=Entry()
rootent1.pack()
return
root=Tk()
root.title('Calculator Menu')
root.geometry('450x450+200+200')
rootlabel=Label(root,text='1.Addition').pack()
rootlabel1=Label(root,text='2.Subtraction').pack()
rootlabel2=Label(root,text='3.Multiplication').pack()
rootlabel3=Label(root,text='4.Division').pack()
rootent=Entry(root) #This is what i am trying to input into 'def options()'
rootent.pack()
rootbutton=Button(root,text='Enter option',command=options).pack()
答案 0 :(得分:1)
问题是python的范围规则有点奇怪。如果函数具有对变量的赋值,则该变量假定为函数的本地变量,并且python不会查看封闭的范围。在您的情况下,违规行为rootent=Entry()
。您对rootent.get()
的调用是在分配之前尝试访问此有意义的变量。因为你在python 3.x中,你可以使用nonlocal
声明来使python访问外部作用域。只需将nonlocal rootent
放在options()的开头,我认为它将正常工作。
在这里有更多关于使用非本地运算符的讨论:Python nonlocal statement
基本上,global
告诉python有问题的变量名称位于模块(文件)级别。 nonlocal
告诉python搜索命名变量的封闭范围并使用该版本,这更像是在其他语言中你必须明确声明所有变量的“默认”行为。
答案 1 :(得分:0)
您正尝试从先前未声明过的变量中get
。代码中声明的rootent
变量在哪里?你需要告诉我们。很难猜出rootent
的类型是什么。
答案 2 :(得分:-1)
感谢您的帮助,现在已修复,已添加nonlocal
并将float(rootent.get())
更改为rootent.get()
,似乎可以解决所有问题。