raw_input print float entrada datos python python-3.x input python-2.x raw-input

print - Uso de input/raw_input en python 2 y 3



python input() (6)

Esta pregunta ya tiene una respuesta aquí:

Me gustaría establecer un indicador de usuario con la siguiente pregunta:

save_flag is not set to 1; data will not be saved. Press enter to continue.

input() funciona en python3 pero no en python2. raw_input() funciona en python2 pero no en python3. ¿Hay alguna manera de hacer esto para que el código sea compatible tanto con python 2 como con python 3?


Actualización: este método solo funciona si tiene instalado el futuro y las respuestas anteriores son mucho mejores y más generalizables.

De esta hoja de trucos hay otro método que se ve más limpio:

# Python 2 and 3: from builtins import input


Carga explícitamente la función:

from builtins import input

Luego puede usar input() en python2 y python3.

Puede que tenga que instalar la dependencia:

pip install future


Creo que la mejor manera de hacerlo es

import six six.moves.input()

... funcionará en 2 y 3.


Enlazar raw_input para input en Python 2:

try: input = raw_input except NameError: pass

Ahora la input también devolverá una cadena en Python 2.

Si está utilizando six para escribir el código 2/3 compatible, entonces six.input() apunta a raw_input() en Python 2 y input() en Python 3.


Esto es porque, en python 2, raw_input() acepta todo lo dado a stdin, como una cadena, donde como input() preserva el tipo de datos del argumento dado (es decir, si el argumento dado es de tipo int , entonces permanecerá como int solo, pero no se convertirá en string como en el caso de raw_input() ). Básicamente, cuando se utiliza input() , toma los argumentos proporcionados en stdin como cadena y los evalúa. Y esta evaluación convierte el argumento al tipo correspondiente.

# Python 2.7.6 >>> a = raw_input("enter :- ") enter :- 3 >>> type(a) # raw_input() converts your int to string <type ''str''> >>> a = input("enter :- ") enter :- 3 >>> type(a) # input() preserves the original type, no conversion <type ''int''> >>>

Por lo tanto, al usar input() en Python 2, el usuario debe tener cuidado al pasar los argumentos. Si está pasando una cadena, debe pasarla con comillas (ya que Python reconoce los caracteres dentro de la comilla como una cadena). Else NameError se NameError .

>>> a = input("enter name :- ") enter name :- Derrick Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name ''Derrick'' is not defined >>> a = input("enter name :- ") enter name :- ''Derrick'' >>> a ''Derrick''

Mientras que, si usa raw_input() , no necesita preocuparse por el tipo de datos mientras pasa el argumento como todo lo que acepta como una cadena. Pero sí, dentro de tu código debes ocuparte de la conversión de tipo apropiada.

Para evitar este cuidado adicional necesario para input() en Python 2, se ha eliminado en Python 3. Y raw_input() ha cambiado de nombre a input() en Python 3. La funcionalidad de input() de Python 2 ya no está en Python 3. input() en Python 3 sirve lo que raw_input() estaba sirviendo en Python 2.

Esta publicación puede ser útil para una comprensión detallada.


Puedes escribir tu código en python2 y usar futurize o en python3 y usar pasteurize . Esto elimina la complejidad de pensar sobre códigos compatibles y garantiza buenas prácticas.

En relación con esta pregunta específica

from builtins import input

Es exactamente lo que producen los scripts anteriores.