¿Cómo obtengo la entrada del usuario desde el teclado en Python 2?

Escribí una función en Python que le pide al usuario que dé dos números y los agrega. También le pide al usuario que ingrese una ciudad y la imprime. Por alguna razón, cuando lo ejecuto en un shell, obtengo “el nombre no está definido” después de ingresar a la ciudad.

def func_add(num1, num2): a = input("your city") print a return num1 + num2 

Si estás en Python 2, necesitas usar raw_input :

 def func_add(num1, num2): a = raw_input("your city") print a return num1 + num2 

input hace que todo lo que escriba se evalúe como una expresión de Python, por lo que termina con

 a = whatever_you_typed 

Entonces, si no hay una variable llamada whatever_you_typed obtendrá un NameError .

Con raw_input , solo guarda lo que raw_input en una cadena, por lo que terminas con

 a = 'whatever_you_typed' 

que apunta a a esa cadena, que es lo que quieres.

 input() 

ejecuta (en realidad, evalúa) la expresión como si fuera un fragmento de código, buscando un objeto con el nombre que escribiste, debes usar

 raw_input() 

Este es un peligro para la seguridad, y desde Python 3.x, input () se comporta como raw_input (), que se ha eliminado.

quieres usar raw_input input es como eval

Desea usar raw_input() lugar. input() espera Python, que luego se eval .

Quieres raw_input , no input .

 input(...) input([prompt]) -> value Equivalent to eval(raw_input(prompt)). 

Opuesto a…

 raw_input(...) raw_input([prompt]) -> string Read a string from standard input. The trailing newline is stripped. If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError. On Unix, GNU readline is used if enabled. The prompt string, if given, is printed without a trailing newline before reading. 

En Python 2.x, la input solicita una expresión de Python (como num1 + 2 ) que luego se evalúa. Desea raw_input que le permite a uno pedir cadenas arbitrarias.