PYTHON cual es la diferencia entre eval y int

Anteriormente escuché que eval(input(a)) convertirá una cadena automáticamente a int, pero si código

 age = eval(input("enter age")) 

durante la entrada i tecleo 01 es un error, pero cuando codifico

 age = int(input("enter age")) 

01 como entrada funciona perfectamente. Por que es

eval evalúa la expresión de python. En Python 3, los números que comienzan con 0 no están permitidos (a excepción de 0000 , consulte ¿Por qué 000 evalúa a 0 en Python 3? ). En Python 2, esos se interpretan como números octales (base 8). No mejor … (python 3 base 8 ahora usa exclusivamente el prefijo Oo )

int realiza una conversión de cadena a entero, por lo que no puede evaluar una expresión compleja (que no necesita), pero no está sujeta a esta syntax de cero inicial.

Otra característica interesante es que puedes verificar si la expresión ingresada es un entero usando un bloque de try/except simple y calificado:

 while True: try: age = int(input("enter age")) break except ValueError: print("Retry!") 

(con eval tendrías que protegerte de todas las excepciones)

Consejo: use int , porque es más seguro, no tiene problemas de seguridad (eval puede evaluar cualquier expresión, incluidas las llamadas al sistema y la eliminación de archivos), y se adapta perfectamente a su propósito.

Nota: el código anterior aún no es seguro con python 2: la input actúa como eval . Puede proteger su código contra esto con el código simple al inicio de su módulo:

 try: input = raw_input except NameError: pass 

por lo que la input python 2 ya no es inalcanzable y llama a raw_input en raw_input lugar. Python 3 ignora ese código.

eval() se utiliza para verificar una expresión. En número se considera una expresión, excepto números octales (números que comienzan con 0). int() maneja la conversión de cadena a entero. Hay muchas razones por las que debes evitar usar eval() . Solo ten en cuenta:

  • Python 2.x

     x = raw_input('Enter number here: ') 
  • Python 3.x

     x = input('Enter number here: ') 
  • Python 2.x
    Riesgo de seguridad:

     x = input('Enter number here: ') 
  • Python 3.x
    Riesgo de seguridad:

     x = eval(input('Enter number here: ')) 

Además, tenga en cuenta que eval() tiene el potencial de ejecutar código, lo que podría causar un gran riesgo de seguridad. Le sugiero que no lo use a menos que sepa claramente lo que está haciendo o podría comprometer su aplicación.