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