¿Cuál es la diferencia entre raw_input()
y input()
en Python 3?
input
a raw_input
e ignorar los errores de identificación.
¿Cuál es la diferencia entre raw_input()
y input()
en Python 3?
input
a raw_input
e ignorar los errores de identificación.
Respuestas:
La diferencia es que raw_input()
no existe en Python 3.x, mientras que input()
sí. En realidad, el viejo raw_input()
ha sido renombrado input()
y el viejo input()
se ha ido, pero se puede simular fácilmente usando eval(input())
. (Recuerde que eso eval()
es malo. Intente utilizar formas más seguras de analizar su entrada si es posible).
raw_input
...?" - "La diferencia es que no hay raw_input
". ... ¡Una diferencia bastante drástica, diría yo!
eval
(y exec
) generalmente deben evitarse porque pueden ser un riesgo para la seguridad. Para más detalles, consulte Eval realmente es peligroso por el veterano de SO Ned Batchelder. Y, por supuesto, ese consejo también se aplica al antiguo Python 2 input
.
eval()
y exec()
, pero primero debe comprender por qué no debe usarlo eval()
antes de decidir usarlo.
En Python 2 , raw_input()
devuelve una cadena e input()
intenta ejecutar la entrada como una expresión de Python.
Dado que obtener una cadena era casi siempre lo que quería, Python 3 lo hace con input()
. Como dice Sven, si alguna vez quieres el viejo comportamiento, eval(input())
funciona.
raw_input()
.
raw_input()
toma exactamente lo que el usuario escribió y lo devuelve como una cadena.
input()
primero toma el raw_input()
y luego realiza un eval()
sobre él también.
La principal diferencia es que input()
espera una declaración de Python sintácticamente correcta donde raw_input()
no lo hace.
raw_input()
fue renombrado a input()
así que ahora input()
devuelve la cadena exacta.input()
fue eliminado.Si desea usar el antiguo input()
, lo que significa que necesita evaluar una entrada del usuario como una declaración de Python, debe hacerlo manualmente usando eval(input())
.
En Python 3, raw_input()
no existe lo que ya fue mencionado por Sven.
En Python 2, la input()
función evalúa su entrada.
Ejemplo:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
En el ejemplo anterior, Python 2.x está tratando de evaluar harsha como una variable en lugar de una cadena. Para evitar eso, podemos usar comillas dobles alrededor de nuestra entrada como "harsha":
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
Datos crudos()
La función raw_input () `no evalúa, solo leerá lo que ingrese.
Ejemplo:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
Ejemplo:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
En el ejemplo anterior, solo estaba tratando de evaluar la entrada del usuario con la eval
función.
Me gustaría agregar un poco más de detalle a la explicación proporcionada por todos para los usuarios de Python 2 . raw_input()
, que, por ahora, sabes que evalúa los datos que el usuario ingresa como una cadena. Esto significa que python no intenta ni siquiera entender los datos ingresados nuevamente. Todo lo que considerará es que los datos ingresados serán una cadena, ya sea que se trate de una cadena real o int o algo así.
Mientras que input()
por otro lado intenta comprender los datos ingresados por el usuario. Entonces la entrada como helloworld
incluso mostraría el error como ' helloworld is undefined
'.
En conclusión, para python 2 , para ingresar una cadena también debe ingresarla como ' helloworld
', que es la estructura común utilizada en python para usar cadenas.
Si desea asegurarse de que su código se está ejecutando con python2 y python3, use la función input () en su script y agregue esto para comenzar su script:
from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")