用户在Python中输入后,“NameError:name''未定义”

时间:2010-01-19 02:40:03

标签: python

我完全迷失了为什么这不起作用。应该准确地工作吧?

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'作为输入。我已经读过print语句曾经没有括号但是已经被弃用了吗?

3 个答案:

答案 0 :(得分:13)

请勿在2.x中使用input()。请改用raw_input()。总是

答案 1 :(得分:12)

在Python 2.x中,input()“评估”输入的内容。(参见help(input))。因此,当您键入k时,input()会尝试查找k。由于未定义,因此会引发NameError异常。

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

如果你真的想使用input()(这是不可取的),那么引用你的k变量如下:

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

答案 2 :(得分:0)

接受的答案提供了正确的解决方案,@ ghostdog74给出了异常的原因。我认为,一步一步地看到为什么这会引发NameError(而不是像ValueError这样的其他东西)可能会有所帮助:

根据Python 2.7文档,input() evaluates您输入的内容,基本上您的程序就变为:

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中的每个步骤来尝试一下。请注意,异常是在第一行引发的,而不是在print语句中引发的。