Recibo un error cuando intento ejecutar este script simple:
input_variable = input ("Enter your name: ")
print ("your name is" + input_variable)
Digamos que escribo "amigo", el error que obtengo 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 estos scripts con Python 2.7.
python
python-2.7
input
nameerror
chillpenguin
fuente
fuente

inputcomportarme de esta manera, pero solo en 2.7. ¿Qué dice cuando se ejecutapython --versiondesde un símbolo del sistema? Alternativamente, ¿qué pasa si escribeimport sys; print(sys.version)al comienzo de su guión?import sysy como segunda líneaprint(sys.version_info)para determinar qué versión está utilizando.Respuestas:
TL; DR
inputfunciona en Python 2.7, evalúa lo que ingrese, como una expresión de Python. Si simplemente desea leer cadenas, use laraw_inputfunción en Python 2.7, que no evaluará las cadenas leídas.Si está utilizando Python 3.x, se le
raw_inputha cambiado el nombreinput. Citando las notas de la versión de Python 3.0 ,En Python 2.7 , hay dos funciones que se pueden usar para aceptar las entradas del usuario. Uno es
inputy el otro esraw_input. Puedes pensar en la relación entre ellos de la siguiente maneraConsidere la siguiente pieza de código para entender esto mejor
inputacepta una cadena del usuario y la evalúa en el contexto actual de Python. Cuando escribodudecomo entrada, descubre quedudeestá vinculado al valorthefourtheyey, por lo tanto, el resultado de la evaluación se conviertethefourtheyey se le asignainput_variable.Si ingreso algo más que no está allí en el contexto actual de Python, fallará
NameError.Consideraciones de seguridad con Python 2.7
input:Como se evalúa cualquier tipo de usuario, también impone problemas de seguridad. Por ejemplo, si ya ha cargado el
osmódulo en su programa conimport os, y luego el usuario escribePython evaluará esto como una expresión de llamada de función y se ejecutará. Si está ejecutando Python con privilegios elevados, el
/etc/hostsarchivo se eliminará. Mira, ¿qué tan peligroso puede ser?Para demostrar esto, intentemos ejecutar la
inputfunción nuevamente.Ahora, cuando
input("Enter your name: ")se ejecuta, espera la entrada del usuario y la entrada del usuario es una invocación válida de la función Python, por lo que también se invoca. Es por eso que estamos viendo elEnter your name again:aviso nuevamente.Entonces, estás mejor con la
raw_inputfunción, asíSi necesita convertir el resultado a otro tipo, puede usar las funciones apropiadas para convertir la cadena devuelta por
raw_input. Por ejemplo, para leer entradas como enteros, use laintfunción, como se muestra en esta respuesta .En python 3.x , solo hay una función para obtener las entradas del usuario y se llama
input, que es equivalente a Python 2.7raw_input.fuente
Está ejecutando Python 2, no Python 3. Para que esto funcione en Python 2, use
raw_input.fuente
Como está escribiendo para Python 3.x, querrá comenzar su script con:
Si utiliza:
Por defecto será Python 2.x. Estos van en la primera línea del script, si no hay nada que comienza con #! (también conocido como el shebang).
Si sus scripts solo comienzan con:
Luego puedes cambiarlo a:
Aunque este formato más corto solo es reconocido por unos pocos programas, como el iniciador, por lo que no es la mejor opción.
Los primeros dos ejemplos se usan mucho más y ayudarán a garantizar que su código funcione en cualquier máquina que tenga instalado Python.
fuente
Debe usar
raw_inputporque está usando python-2.7. Cuando lo usainput()en una variable (por ejemplos = input('Name: '):), ejecutará el comando EN el entorno Python sin guardar lo que escribió en la variable (s) y creará un error si lo que escribió no está definido.raw_input()guardará correctamente lo que escribió en la variable (por ejemplo:)f = raw_input('Name : '), y no lo ejecutará en el entorno Python sin crear ningún posible error:fuente
Para python 3 y superior
resolverá el problema en pycharm IDE si está resolviendo en el sitio en línea exactamente hackerrank, luego use:
fuente
Puedes hacer lo siguiente:
o:
fuente
Debe ingresar la entrada entre comillas simples o dobles
fuente
También encontré este problema con un módulo que se suponía que era compatible con Python 2.7 y 3.7
lo que encontré para solucionar el problema fue importar:
esto solucionó la usabilidad para ambos intérpretes
Puedes leer más sobre las seis bibliotecas aquí
fuente
Estamos utilizando lo siguiente que funciona tanto en python 2 como en python 3
fuente
Para cualquier otra persona que pueda encontrarse con este problema, resulta que incluso si incluye
#!/usr/bin/env python3al comienzo de su script, el shebang se ignora si el archivo no es ejecutable.Para determinar si su archivo es ejecutable o no:
./filename.pydesde la línea de comando-bash: ./filename.py: Permission denied, correchmod a+x filename.py./filename.pynuevoSi ha incluido
import sys; print(sys.version)como Kevin sugirió, ahora verá que el script está siendo interpretado por python3fuente
Buenas aportaciones las anteriores.
Ingrese su nombre: Joe ('Hola', 'Joe', <escriba 'str'>) Hola Joe adios Tu nombre: Joe Joe¡Gracias!
fuente
Hay dos formas de solucionar estos problemas,
Primero es simple sin cambio de código que
Python3 ejecuta su script,
si aún desea ejecutar en python2 , luego de ejecutar su script de python, cuando ingrese la entrada, tenga en cuenta
string, simplemente comience a escribir con "la entrada va con comillas dobles" y funcionará en python2.7 yLa segunda forma es con los cambios de código,
use la importación a continuación y ejecute con cualquier versión de python
from six.moves import inputraw_input()función en lugar de lainput()función en su código con cualquier importaciónstr()función comostr(input())y luego asigne a cualquier variableComo el error implica : el
nombre 'amigo' no está definido, es decir, para python 'amigo' se vuelve variable aquí y no tiene ningún valor de tipo definido de python asignado,
por lo que solo está llorando como un bebé, así que si definimos una variable 'amigo' y asignamos cualquier valor y pasarlo, funcionará, pero eso no es lo que queremos, ya que no sabemos qué usuario ingresará y, además, queremos capturar la entrada del usuario.
fuente
Puede cambiar qué python está utilizando con su IDE, si ya ha descargado python 3.x, no debería ser demasiado difícil de cambiar. Pero su script funciona bien en Python 3.x, solo cambiaría
a
Porque con la coma se imprime con un espacio en blanco en el medio
your name isy lo que haya ingresado el usuario. Y: si está utilizando 2.7, simplemente use enraw_inputlugar de entrada.fuente