16

I'm completely lost as to why this isn't working. Should work precisely, right?

UserName = input("Please enter your name: ")
print ("Hello Mr. " + UserName)
raw_input("<Press Enter to quit.>")

I get this exception:

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  

It says NameError 'k', because I wrote 'k' as the input during my tests. I've read that the print statement used to be without parenthesis but that has been deprecated right?

LondonRob
  • 73,083
  • 37
  • 144
  • 201
Sergio Tapia
  • 40,006
  • 76
  • 183
  • 254

3 Answers3

15

Do not use input() in 2.x. Use raw_input() instead. Always.

Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
12

In Python 2.x, input() "evaluates" what is typed in. (see help(input)). Therefore, when you key in k, input() tries to find what k is. Because it is not defined, it raises the NameError exception.

Use raw_input() in Python 2.x. In 3.0x, input() is fixed.

If you really want to use input() (and this is really not advisable), then quote your k variable as follows:

>>> UserName = input("Please enter your name: ")
Please enter your name: "k"
>>> print UserName
k
LondonRob
  • 73,083
  • 37
  • 144
  • 201
ghostdog74
  • 327,991
  • 56
  • 259
  • 343
0

The accepted answer provides the correct solution and @ghostdog74 gives the reason for the exception. I figured it may be helpful to see, step by step, why this raises a NameError (and not something else, like ValueError):

As per Python 2.7 documentation, input() evaluates what you enter, so essentially your program becomes this:

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

Let's assume input is bob, then this becomes:

username = eval('bob') 

Since eval() executes 'bob' as if it were a Python expression, your program becomes this:

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

You could make it work my entering "bob" (with the quotes), because then the program is valid:

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

You can try it out by going through each step in the Python REPL yourself. Note that the exception is raised on the first line already, not within the print statement.

miraculixx
  • 10,034
  • 2
  • 41
  • 60