2014-04-14 3 views
0

여기에 지침이 필요합니다. 이것은 아마도 어리석은 실수이지만, "builtins.NameError : 전역 이름 - 정의되지 않았습니다"오류가 발생하며 이유를 볼 수 없습니다. - 아직 언어를 배우고 있습니다. :)Python 3 builtins.NameError : 전역 이름 ---이 정의되지 않았습니다. -

Traceback (most recent call last): 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 36, in <module> 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 33, in main 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 3, in option 
    pass 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 11, in enter 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 33, in main 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 5, in option 
    File "C:\Program Files (x86)\Wing IDE 101 5.0\src\debug\tserver\_sandbox.py", line 18, in view 
builtins.NameError: global name 'msg' is not defined 

내가 안내 시겠어요 :

def option(x): 
    if x == "E": 
     enter() 
    elif x == "V": 
     view() 
    else: 
     exit() 

def enter(): 
    msg = input("Enter the message\n") 
    main() 

def view(): 
    ##if msg == 0: 
    #print("no message yet") 
    #main() 
    #else: 
    print("The message is:", msg) 
    main()   

def exit(): 
    print("Goodbye!") 


def main(): 
    print("Welcome to BBS") 
    print("MENU") 
    print("(E)nter a message") 
    print("(V)iew message") 
    print("e(X)it") 
    print("Enter your selection:") 
    choice = input() 
    option(choice) 
    #msg = 0 

main() 

내 문제는 내가 처음 "E"옵션을 선택하고있어 비록 내가이납니다 있다는 것입니다 : 여기

내 코드입니다 ? 나는 정보를 찾고 있었고 아무 것도 발견하지 못했고, 내 결론은 아마도 그것은 정말로 어리 석고 멍청한 무언가 일 것입니다.

또한 내가 쓴 의견에서 볼 수 있듯이 msg를 사용하여 "보기"에서 오류가 발생하지 않도록 제한하려고 시도했습니다! = 0 - main()에서 msg = 0을 작성했습니다. 이것은 enter()를 거친 후 main()으로 돌아가서 msg == 0을 다시 만들기 때문에 분명히 작동하지 않습니다. 이 문제를 해결하는 방법을 이해하는 데 도움이되는 페이지/가이드에 나를 연결할 수 있습니까? 내가

감사합니다,

이타치

+0

[범위] (http://gettingstartedwithpython.blogspot.com/2012/05/variable-scope.html)에 대한이 기사를 살펴보십시오. – 2rs2ts

답변

2

여기서 문제가 enter() 내부 msg는 지역 변수라는 것이다 다음 enter() 기능이 실행될 때이 만들어진 것, enter()이 반환되면 사라집니다. 일반적으로 함수 내에서 변수를 설정할 때마다 로컬 변수를 설정합니다. 말했다

def enter(): 
    global msg 
    msg = input("Enter the message\n") 
    main() 

, 전역 변수는 종종 일을하는 가장 좋은 방법은 아니다 : 당신도 함수가 반환 한 후 그 값을 유지하는 글로벌 변수를 설정하려는 경우 global 문을 사용합니다. enter() 함수를 변수에 저장하는 대신 메시지를 반환하는 것이 더 좋을 수 있습니다.

0

msg .. 숟가락 그 정도 공급되고 싶지 않아하는 임의의 장소에서 사용하는 범위 아니에요 이름입니다. 그래서 NameError을 받게됩니다.

작성한 각 기능은 독립적이어야하며 간단한 입출력을 가져야합니다.

main은 사용자의 진입 점이며 적절할 경우 다른 기능을 호출해야합니다.

해당 함수는 실행이 완료되면 호출자에게 반환됩니다. 어떤 경우에는 발신자에게 어느 정도의 양의 데이터를 반환해야 할 수 있습니다. mainview를 호출하고 반환하는 방법을

예를 들어, 여기에 보여주는 문제의 하위 집합 :

def view(text): 
    if not text: 
     print("no message yet") 
    else: 
     print("The message is:", msg) 

def main(): 
    print("Welcome to BBS") 
    print("MENU") 
    print("(E)nter a message") 
    print("(V)iew message") 
    print("e(X)it") 
    print("Enter your selection:") 
    while not exiting: 
     choice = input() 
     view(choice) 
     exiting = True # TODO: set this based on the value in choice 
관련 문제