“NameError: name ” no está definido” después de la entrada del usuario en Python

Estoy completamente perdido en cuanto a por qué esto no funciona. Debería funcionar precisamente, ¿verdad?

UserName = input("Please enter your name: ") print ("Hello Mr. " + UserName) raw_input("") 

Me sale esta excepción:

 Traceback (most recent call last): File "Test1.py", line 1, in  UserName = input("Please enter your name: ") File "", line 1, in  NameError: name 'k' is not defined 

Dice NameError 'k' , porque escribí 'k' como entrada durante mis pruebas. He leído que la statement de impresión solía estar sin paréntesis, pero que ha quedado en desuso, ¿verdad?

No utilice input() en 2.x. Utilice raw_input() lugar. Siempre.

En Python 2.x, input() “evalúa” lo que está escrito. (Ver help(input) ). Por lo tanto, cuando tecleas k , input() intenta encontrar qué k es. Debido a que no está definido, genera la excepción NameError .

Use raw_input() en Python 2.x. En 3.0x, la input() es fija.

Si realmente desea usar input() (y esto no es realmente recomendable), entonces cite su variable k siguiente manera:

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

La respuesta aceptada proporciona la solución correcta y @ ghostdog74 da el motivo de la excepción. Pensé que podría ser útil ver, paso a paso, por qué esto genera un NameError (y no otra cosa, como ValueError):

Según la documentación de Python 2.7, input() evalúa lo que ingresas, por lo que esencialmente tu progtwig se convierte en esto:

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

Asummos que la entrada es bob , entonces esto se convierte en:

 username = eval('bob') 

Como eval() ejecuta ‘bob’ como si fuera una expresión de Python, tu progtwig se convierte en esto:

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

Podrías hacer que funcione ingresando “bob” (con las comillas), porque entonces el progtwig es válido:

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

Puedes probarlo yendo a través de cada paso en Python REPL . Tenga en cuenta que la excepción ya está activada en la primera línea, no dentro de la statement de impresión.