“用户在Python中input后,NameError:name'没有被定义'

我完全失去了为什么这是行不通的。 应该正确地工作,对吗?

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' ,因为我在testing中写'k'作为input。 我读过的印刷语句曾经是没有括号,但已被弃用的权利?

不要在2.x中使用input() 。 使用raw_input()代替。 总是。

在Python 2.x中, input() “计算”键入的内容(请参阅help(input) )。 因此,当你input() kinput()试图找出k是什么。 由于没有定义,所以引发了NameErrorexception。

在Python 2.x中使用raw_input() 。 在3.0x中, input()是固定的。

如果你真的想使用input() (这实在不可取),那么引用你的kvariables如下:

 >>> UserName = input("Please enter your name: ") Please enter your name: "k" >>> print UserName k 

被接受的答案提供了正确的解决scheme,@ ghostdog74给出了例外的原因。 我想,一步一步来看,为什么会引发一个NameError (而不是像ValueError这样的其他内容):

按照Python 2.7的文档, input()评估你input的内容,所以你的程序变成这样:

 username = input('...') # => translates to username = eval(raw_input('...')) 

假设input是bob ,那么这变成:

 username = eval('bob') 

由于eval()执行“bob”就好像它是一个Pythonexpression式,所以你的程序变成这样:

 username = bob => NameError print ("Hello Mr. " + username) 

可以让我的工作进入“bob”(用引号),因为那么程序是有效的:

 username = "bob" print ("Hello Mr. " + username) => Hello Mr. bob 

您可以通过自己完成Python REPL中的每一步来尝试。 请注意,该exception是在第一行中引发的,而不是在print语句中。