“用户在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()
k
, input()
试图找出k
是什么。 由于没有定义,所以引发了NameError
exception。
在Python 2.x中使用raw_input()
。 在3.0x中, input()
是固定的。
如果你真的想使用input()
(这实在不可取),那么引用你的k
variables如下:
>>> 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语句中。