versiones guia español descargar python python-2.7 python-3.x input nameerror

python - guia - qgis manual



error de entrada()-NameError: name ''...'' no está definido (8)

Me aparece un error cuando intento ejecutar este sencillo script de Python:

input_variable = input ("Enter your name: ") print ("your name is" + input_variable)

Digamos que escribo "amigo", el error que estoy obteniendo es:

line 1, in <module> input_variable = input ("Enter your name: ") File "<string>", line 1, in <module> NameError: name ''dude'' is not defined

Estoy ejecutando Mac OS X 10.9.1 y estoy usando la aplicación Python Launcher que vino con la instalación de Python 3.3 para ejecutar el script.

Editar: Me di cuenta de que de alguna manera estoy ejecutando estos scripts con 2.7. Supongo que la verdadera pregunta es ¿cómo puedo ejecutar mis scripts con la versión 3.3? Pensé que si arrastraba y soltaba mis scripts encima de la aplicación Python Launcher que está dentro de la carpeta Python 3.3 en mi carpeta de aplicaciones, lanzaría mis scripts usando 3.3. Supongo que este método todavía lanza scripts con 2.7. Entonces, ¿cómo utilizo 3.3?


Está ejecutando Python 2, no Python 3. Para que esto funcione en Python 2, use raw_input .

input_variable = raw_input ("Enter your name: ") print ("your name is" + input_variable)


Para cualquier otra persona que pueda encontrarse con este problema, resulta que incluso si incluye #!/usr/bin/env python3 al comienzo de su script, el shebang se ignora si el archivo no es ejecutable.

Para determinar si su archivo es ejecutable o no:

  • ejecutar ./filename.py desde la línea de comando
  • si obtienes -bash: ./filename.py: Permission denied , ejecuta chmod a+x filename.py
  • ejecutar ./filename.py nuevamente

Si ha incluido import sys; print(sys.version) import sys; print(sys.version) como Kevin sugirió, ahora verá que el script está siendo interpretado por python3


Puede cambiar qué python está usando con su IDE, si ya ha descargado Python 3.x, no debería ser demasiado difícil cambiarlo. Pero tu script funciona bien en Python 3.x, solo cambiaría

print ("your name is" + input_variable)

a

print ("your name is", input_variable)

Porque con la coma se imprime con un espacio en blanco entre your name is y lo que el usuario ingresó. Y: si está utilizando 2.7 simplemente use raw_input lugar de entrada.


U podría hacer

x = raw_input("enter your name") print "your name is %s " % x

o

x = str(input("enter your name")) print "your name is %s" % x


Ya que está escribiendo para Python 3.x, querrá comenzar su script con:

#!/usr/bin/env python3

Si utiliza:

#!/usr/bin/env python

Se establecerá de manera predeterminada en Python 2.x. Estos van en la primera línea de su script, si no hay nada que comience con #! (también conocido como el shebang).

Si tus scripts simplemente comienzan con:

#! python

Entonces puedes cambiarlo a:

#! python3

Aunque este formato más corto solo es reconocido por algunos programas, como el iniciador, no es la mejor opción.

Los dos primeros ejemplos son mucho más utilizados y ayudarán a garantizar que su código funcione en cualquier máquina que tenga instalado Python.


deberías usar raw_input porque estás usando python-2.7, cuando usas input () en un ejemplo de variable: s = input (''Name:''), ejecutará el comando ON en Python Environement sin guardar lo que escribiste en la variable (s) y crear un error Si lo que escribió no está Definido, entonces, puede usar raw_input (), guardará correctamente lo que escribió en la variable, por ejemplo: f = raw_input (''Nombre:'') y no lo hará Ejecútelo en el entorno Python sin Crear un posible error

input_variable = raw_input(''Enter Your Name : '') print("Your Name Is : " + (input_variable))


Para python 3 y superior

s = raw_input ()

resolverá el problema en pycharm IDE si está resolviendo en el sitio en línea exactamente hackerrank y luego usará:

s = input()


TL; DR

función de input en Python 2.7, evalúa lo que sea que ingrese, como una expresión de Python. Si simplemente desea leer cadenas, utilice la función raw_input en Python 2.7, que no evaluará las cadenas de lectura.

Si está utilizando Python 3.x, raw_input ha sido renombrado como input . Citando las notas de la versión de Python 3.0 ,

raw_input() fue renombrado como input() . Es decir, la nueva función input() lee una línea de sys.stdin y la devuelve con la nueva línea final eliminada. EOFError si la entrada finaliza prematuramente. Para obtener el comportamiento anterior de input() , use eval(input())

En Python 2.7 , hay dos funciones que se pueden usar para aceptar entradas de usuario. Uno de ellos es de input y el otro es raw_input . Puedes pensar en la relación entre ellos de la siguiente manera

input = eval(raw_input)

Considere la siguiente pieza de código para entender esto mejor

>>> dude = "thefourtheye" >>> input_variable = input("Enter your name: ") Enter your name: dude >>> input_variable ''thefourtheye''

input acepta una cadena del usuario y evalúa la cadena en el contexto actual de Python. Cuando dude como entrada, encuentra que dude está vinculado al valor thefourtheye y entonces el resultado de la evaluación se convierte en el thefourtheye y eso se asigna a input_variable .

Si introduzco algo más que no está allí en el contexto de python actual, fallará el NameError .

>>> input("Enter your name: ") Enter your name: dummy Traceback (most recent call last): File "<input>", line 1, in <module> File "<string>", line 1, in <module> NameError: name ''dummy'' is not defined

Consideraciones de seguridad con la input Python 2.7:

Dado que se evalúa cualquier tipo de usuario, también impone problemas de seguridad. Por ejemplo, si ya ha cargado el módulo os en su programa con import os , y luego el usuario escribe

os.remove("/etc/hosts")

esto será evaluado como una expresión de llamada de función por python y se ejecutará. Si está ejecutando Python con privilegios elevados, se eliminará el archivo /etc/hosts . Mira, ¿qué tan peligroso podría ser?

Para demostrar esto, intentemos ejecutar input función de input nuevamente.

>>> dude = "thefourtheye" >>> input("Enter your name: ") Enter your name: input("Enter your name again: ") Enter your name again: dude

Ahora, cuando se ejecuta la input("Enter your name: ") , espera la entrada del usuario y la entrada del usuario es una invocación de función de Python válida, por lo que también se invoca. Es por eso que estamos viendo Enter your name again: solicite nuevamente.

Entonces, estás mejor con la función raw_input , como esta

input_variable = raw_input("Enter your name: ")

Si necesita convertir el resultado a algún otro tipo, puede usar las funciones apropiadas para convertir la cadena devuelta por raw_input . Por ejemplo, para leer las entradas como enteros, use la función int , como se muestra en esta respuesta .

En Python 3.x , solo hay una función para obtener las entradas del usuario y eso se llama input , que es equivalente a raw_input Python 2.7.