每个人都过得愉快。我的python程序需要帮助。我几乎完成了一个警察档案系统,你可以输入和搜索。我遇到的问题是搜索功能。以下是开始使用的源代码。
global Value
def config1():
Entry1.config(state="normal")
Entry1.delete(first=0,last=99)
Entry1.insert(0,"LastName")
Entry1.config(state="disabled")
ThisEntry.delete(first=0,last=99)
Value = Police['text']
def config5():
Entry1.config(state="normal")
Entry1.delete(first=0,last=99)
Entry1.insert(0,"LastName")
Entry1.config(state="disabled")
ThisEntry.delete(first=0,last=99)
Value = Visitor['text']
def Search():
Entry1.config(state="normal")
x = Entry1.get()
y = ThisEntry.get()
Entry1.config(state="disabled")
global Value
if x == "LastName" and Value == "POLICE IDENTITY":
z = 0
ThisText.config(state="normal")
ThisText.delete("1.0","end")
c.execute("SELECT LastName FROM Police WHERELastName=?",(y,))
row = c.fetchall()
for a in row:
c.execute("SELECT * FROM Police WHERE LastName=?",(y,))
row = c.fetchall()
elif x == "LastName" and Value == "VISITOR":
z = 0
ThisText.config(state="normal")
ThisText.delete("1.0","end")
ThisText.insert(INSERT,"VISITORS")
c.execute("SELECT LastName FROM Visitors WHERE LastName=?",(y,))
row = c.fetchall()
for a in row:
ThisText.insert(INSERT,"\n\n")
ThisText.insert(INSERT,"Visitor Number: ")
ThisText.insert(INSERT,row[z][0])
ThisText.insert(INSERT,"\n")
ThisText.insert(INSERT,"First Name: ")
ThisText.insert(INSERT,row[z][1])
ThisText.insert(INSERT,"\n")
ThisText.insert(INSERT,"Middle: ")
ThisText.insert(INSERT,row[z][2])
ThisText.insert(INSERT,"\n")
ThisText.insert(INSERT,"Last Name: ")
我使用函数def config1():
和def config5():
只是为了更改Value
的值。我将Value
声明为global
,因为我只是为了更改值而需要它。
主要目标是,如果值等于我要搜索的记录,条件将返回一行,如果它等于我要搜索的记录类型Value
。
因此,如果我在警察身份中搜索LastName
,它将返回一行。与搜索访客相同。
如果我在警察标识选项卡中搜索姓氏,它会正确返回一行。但每当我尝试在“访问者”选项卡中搜索姓氏时,都会返回以下错误:
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 1550, in __call__
return self.func(*args)
File "C:\Users\User\Desktop\School Files (Don't Touch)\Project in SE\Project in SE.py", line 1420, in Search
elif x == "LastName" and Value == "POLICE IDENTITY":
NameError: name 'Value' is not defined
我试图在函数本身上声明全局变量,但它仍然不起作用。我真的不明白为什么它在一个条件下工作但在另一个条件下不起作用。我不知道Python是否正在玩我或其他什么游戏。顺便说一下,我认为这个问题没有重复。
答案 0 :(得分:0)
我不知道为什么错误似乎是在第二个条件而不是第一个条件上触发 - 我怀疑还有其他一些错误 - 但一般来说你需要在分配给它的函数中声明全局变量Value
。这意味着将global Value
添加到您的config1
和config5
函数中。
global Value
函数中Search
声明不,因为默认情况下,程序应该在失败之后搜索全局变量中的Value
在局部变量中找到它。
以下代码说明了为什么可能在第二个条件而不是第一个条件上触发错误:
global x
def foo():
something = False
if something and x == 10:
print "Yes"
elif x == 50:
print "No"
foo()
这会导致错误:
第15行,在foo elif x == 50:
NameError:全局名称' x'未定义
虽然x
被声明为全局,但没有为其分配值。这不会导致第一个条件if something and x == 10
出错,因为something
为False,因此永远不会达到与x
相关的条件。只有当程序达到第二个条件时,它才能避免尝试评估x
,然后引发错误。