“NameError: name ” is not defined” after user input in Python

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?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

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

Method 2

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

Method 3

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.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x