2017-03-19 9 views
0

모두에게 좋은 날. 내 파이썬 프로그램에 도움이 필요해. 나는 거의 당신이 입력하고 검색 할 수있는 경찰 프로필 시스템을 만들고있다. 내가 가진 문제는 검색 기능입니다. 다음은 시작하기위한 소스 코드입니다. 전역 변수가 파이썬에서이 변수를 제외한 다른 조건에서 작동합니다.

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: ") 

은 그냥 Value의 값을 변경하는 기능을 def config1():def config5():을 사용했다. 내가 값을 변경하기 위해 필요하기 때문에 Valueglobal으로 선언했습니다.

주요 목표는 값이 검색하려는 레코드와 같고 검색 할 레코드 유형이 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 

가 나는 또한 함수 자체에 전역 변수를 선언하려하지만 여전히 작동하지 않습니다. 나는 정말로 그것이 한 가지 조건에서 효과가 있지만 다른 조건에서는 효과가없는 이유를 알지 못합니다. 나는 파이썬이 나에게 게임을하고 있는지 알지 못한다. Btw 나는이 질문에 대한 중복이 있다고 생각하지 않는다.

+1

가능한 중복 [전역 변수를 작성한 함수 이외의 함수에서 전역 변수 사용] (http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than- The-one-that-created-themes) – torek

+0

내 프로그램의 오류는 무엇입니까? :( – Abraham

+0

여기에있는 오류는'elif x == "LastName"과 Value == "POLICE IDENTITY":'조건과 관련이 있습니다.이 코드 샘플에서는 제공하지 않습니다.일반적으로'global value' 선언은'Value' ('Search')를 참조하는 함수가 아니라'Value' ('config1'과'config5')에 할당하는 함수에 있어야합니다. – Stuart

답변

0

1 차가 아닌 2 차 조건에서 오류가 발생하는 것 같습니다. 다른 버그가 있다고 의심됩니다. 일반적으로 Value에 할당 된 함수에서 전역 변수를 선언해야합니다. . 즉, config1config5 함수에 global Value을 추가하는 것입니다. 프로그램이 기본적으로 지역 변수 사이에 그것을 찾기 위해 실패한 후 전역 변수들 Value 검색해야하기 때문에

global Value 선언은 Search 함수 내에서 필요한 하지입니다. 이 오류가 발생

global x 

def foo(): 
    something = False 
    if something and x == 10: 
     print "Yes" 
    elif x == 50: 
     print "No" 

foo() 

: x 비록

line 15, in foo elif x == 50:

NameError: global name 'x' is not defined

글로벌로 선언되었다 오류 대신 1의 제 2 조건으로 트리거 될 이유

다음 코드는 보여 값이 지정되지 않았습니다. something이 거짓이어서 x과 관련된 조건에 절대로 도달하지 않기 때문에 첫 번째 조건 if something and x == 10에서 오류가 발생하지 않습니다. 프로그램이 x을 평가하려고 시도 할 수없는 두 번째 조건에 도달했을 때만 오류가 발생합니다.