Python 3 builtins.NameError:未定义全局名称“”-
这里需要一些指导。这可能是一个愚蠢的错误,但我得到了“builtins.NameError:global name--is not defined”错误,我不明白为什么——我还在学习语言:) 这是我的密码:Python 3 builtins.NameError:未定义全局名称“”-,python,python-3.x,nameerror,Python,Python 3.x,Nameerror,这里需要一些指导。这可能是一个愚蠢的错误,但我得到了“builtins.NameError:global name--is not defined”错误,我不明白为什么——我还在学习语言:) 这是我的密码: def option(x): if x == "E": enter() elif x == "V": view() else: exit() def enter(): msg = input("Enter th
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”选项,但我还是得到了这个结果:
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
回溯(最近一次呼叫最后一次):
文件“C:\ProgramFiles(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第36行,在
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第33行,在main中
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第3行,在选项中
通过
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第11行,输入
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第33行,在main中
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第5行,在选项中
文件“C:\Program Files(x86)\Wing IDE 101 5.0\src\debug\tserver\\u sandbox.py”,第18行,在视图中
builtins.NameError:未定义全局名称“msg”
能给我引路吗?我一直在搜索信息,但没有找到任何东西,我的结论是,这可能是一件非常愚蠢和愚蠢的事情
另外,正如你们可以从我的评论中看到的,我试图通过检查msg!=0——我在main()中设置了msg=0——这显然不起作用,因为在经过enter()之后,它会返回main()并再次设置msg==0。你们能帮我链接到一个页面/指南,帮助我理解如何解决这个问题吗?我不想被人用勺子喂那么多
谢谢
Itachi是一个不适用于任何地方的名称。这就是为什么会出现
名称错误
您创建的每个函数都应该是独立的,并且具有直接的输入和输出
main
是您的入口点,它应该根据需要调用其他函数
当这些函数的执行完成时,它们将返回给它们的调用者。他们可以而且在某些情况下应该将一定数量的数据返回给调用者
例如,下面是问题的一个子集,显示了main
如何调用view
,然后返回:
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
这里的问题是
msg
insideenter()
是一个局部变量:它是在enter()
函数运行时创建的,当enter()
返回时它就不存在了。通常,无论何时在函数中设置变量,都是在设置局部变量。如果要设置全局变量,即使在函数返回后仍保留其值,请使用global
语句:
def enter():
global msg
msg = input("Enter the message\n")
main()
也就是说,全局变量通常不是做事情的最佳方式。最好让
enter()
函数返回消息,而不是将其存储在变量中。看看这篇关于的文章。