用户输入后在Python中出现"NameError: name '' is not defined
我完全搞不懂为什么这个不管用。应该可以正常工作的,对吧?
UserName = input("Please enter your name: ")
print ("Hello Mr. " + UserName)
raw_input("<Press Enter to quit.>")
我遇到了这个错误:
Traceback (most recent call last):
File "Test1.py", line 1, in <module>
UserName = input("Please enter your name: ")
File "<string>", line 1, in <module>
NameError: name 'k' is not defined
它显示 NameError 'k'
,因为我在测试时输入了 'k'
。我听说过以前的打印语句是不需要括号的,但现在这个写法已经不推荐用了,对吧?
3 个回答
0
这个被接受的答案给出了正确的解决方案,而@ghostdog74解释了为什么会出现这个异常。我觉得逐步分析一下为什么会引发一个NameError
(而不是其他的,比如ValueError)可能会很有帮助:
根据Python 2.7的文档,input()
会对你输入的内容进行评估,所以实际上你的程序变成了这样:
username = input('...')
# => translates to
username = eval(raw_input('...'))
假设输入是bob
,那么这就变成了:
username = eval('bob')
因为eval()
会把'bob'当作Python表达式来执行,所以你的程序变成了:
username = bob
=> NameError
print ("Hello Mr. " + username)
你可以通过输入"bob"(带引号)来让它正常工作,因为那样程序就是有效的:
username = "bob"
print ("Hello Mr. " + username)
=> Hello Mr. bob
你可以通过自己在Python REPL中逐步尝试来验证这一点。注意,异常在第一行就已经引发了,而不是在打印语句中。
12
在Python 2.x中,input()
会“评估”你输入的内容。(可以查看help(input)
了解更多)所以,当你输入k
时,input()
会试图找出k
是什么。因为k
没有被定义,所以会出现NameError
错误。
在Python 2.x中,应该使用raw_input()
。在3.0版本中,input()
的问题已经修复。
如果你真的想使用input()
(但这并不推荐),那么你需要像下面这样把k
用引号括起来:
>>> UserName = input("Please enter your name: ")
Please enter your name: "k"
>>> print UserName
k
15
在Python 2.x版本中,不要使用 input()
。请始终使用 raw_input()
。