如何解决UnboundLocalError:分配前已引用本地变量'name_chk'
我已经在Python中使用Tkinter和MysqL创建了银行管理系统。
def deposit_acc_chk():
mycursor.execute("SELECT name FROM bank_master WHERE acno = '"+deposit_entry1.get()+"'")
for x in mycursor:
name_chk = ''.join(map(str,x))
deposit_chk_entry.delete(0,"end")
deposit_chk_entry.insert(0,name_chk)
deposit_chk_entry["state"] = "disabled"
此代码段显示存入资金的帐户持有人的姓名。最初运行良好,但随后出现错误。
Traceback (most recent call last):
File "C:\Users\HP\AppData\Local\Programs\Python\python38-32\lib\tkinter\__init__.py",line 1883,in __call__
return self.func(*args)
File "C:\Users\HP\Desktop\BMS - GUI v1.1.2.py",line 196,in deposit_acc_chk
deposit_chk_entry.insert(0,name_chk)
UnboundLocalError: local variable 'name_chk' referenced before assignment
我试图将变量name_chk
显式声明为全局变量,甚至尝试引用一些已经回答过的此类问题,但并没有太大帮助。
我的错误仍然没有解决!请帮助我。
P.S。 -我是新来的,如果无法正确描述我的问题,请原谅!
解决方法
您应该
-
声明行前的
name_chk
变量(这样,初始化也发生)deposit_chk_entry.insert(0,name_chk)
,例如import tkinter as tk root = tk.Tk() name_chk = tk.StringVar()
或
- 呼叫
deposit_acc_chk()
函数,此函数结束后与 行deposit_chk_entry.insert(0,name_chk)
是为了引起变量的定义 该功能内的name_chk
这是因为SQL语句未返回任何记录,因此未创建name_chk
。
在更新deposit_chk_entry
之前,您应检查是否返回了记录:
def deposit_acc_chk():
mycursor.execute('SELECT name FROM bank_master WHERE acno = %s',(deposit_entry1.get(),))
rec = mycursor.fetchone()
if rec:
deposit_chk_entry['state'] = 'normal'
deposit_chk_entry.delete(0,'end')
deposit_chk_entry.insert(0,rec[0])
deposit_chk_entry['state'] = 'disabled'
或者,如果找不到记录,最好向用户显示一些内容:
def deposit_acc_chk():
mycursor.execute('SELECT name FROM bank_master WHERE acno = %s',))
rec = mycursor.fetchone()
name_chk = rec[0] if rec else '*** No record found ***'
deposit_chk_entry['state'] = 'normal'
deposit_chk_entry.delete(0,'end')
deposit_chk_entry.insert(0,name_chk)
deposit_chk_entry['state'] = 'disabled'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。