全局变量正在处理其他条件,除了python中的这个条件

时间:2017-03-19 13:30:40

标签: python function if-statement global

每个人都过得愉快。我的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是否正在玩我或其他什么游戏。顺便说一下,我认为这个问题没有重复。

1 个答案:

答案 0 :(得分:0)

我不知道为什么错误似乎是在第二个条件而不是第一个条件上触发 - 我怀疑还有其他一些错误 - 但一般来说你需要在分配给它的函数中声明全局变量Value。这意味着将global Value添加到您的config1config5函数中。

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,然后引发错误。