08. Python: validar entradas (ejemplos)

Publicado por

Las validaciones en un programa permiten asegurar que los datos proporcionados por los usuarios sean correctos, estas previenen posibles errores que estos puedan cometer, ya sea desde teclado o desde un archivo. Por esa razón son muy importantes en la programación, para que los sistemas devuelvan resultados exitosos. Veamos los siguientes ejemplos:

Validación de entrada de usuario

Es importante siempre validar los datos que se van a leer desde teclado, sea cual sea su tipo. Para avisarle al usuario de su error se utilizan las excepciones y es indispensable volver a solicitarle la información, por lo que estas siempre van dentro de ciclos que concluyen su ejecución hasta que la entrada sea correcta.

En el siguiente script se está validando que el usuario introduzca un entero.

#!/usr/bin/python

def lee_entero():
    while True:
        entrada = raw_input("Escribe un numero entero: ")
    try:
        entrada = int(entrada)
        return entrada
    except ValueError:
        print "La entrada es incorrecta: escribe un numero entero"

Salida:

$ python lee_entero.py
Escribe un numero entero: hola
La entrada es incorrecta: escribe un numero entero
Escribe un numero entero:
La entrada es incorrecta: escribe un numero entero
Escribe un numero entero: 12.30
La entrada es incorrecta: escribe un numero entero
Escribe un numero entero: 1000

Validación de argumentos

En este script se está validando el número de argumentos que recibe y además si estos son válidos o no. En caso de que no se introduzcan los argumentos muestra una pequeña documentación de lo que espera recibir.

#!/usr/bin/python
# -*- coding:utf-8 -*-

import sys
import os

def uso(mensaje, codigo = 1):
    print mensaje
    print "%s: directorio_origen directorio_destino" % sys.argv[0]
    sys.exit(codigo)

if len(sys.argv) != 3:
    uso("Se requieren 2 argumentos, usted introdujo %d" % (len(sys.argv) - 1))
elif not os.path.isdir(sys.argv[1]):
    uso("Directorio de origen no válido")
elif not os.path.isdir(sys.argv[2]):
    uso("Directorio destino no válido")

origen, destino = sys.argv[1:3]

print "El directorio origen es: ", origen
print "El directorio destino es: ", destino

Salida:

$ python uso.py
Se requieren 2 argumentos, usted introdujo 0
uso.py: directorio_origen directorio_destino
$ python uso.py Documentos Descargas
El directorio origen es: Documentos
El directorio destino es: Descargas
$ python uso.py Descargas
Se requieren 2 argumentos, usted introdujo 1
uso.py: directorio_origen directorio_destino
$ python uso.py Descargas Documentos/
El directorio origen es: Descargas
El directorio destino es: Documentos/
$ python uso.py Descargas Documentos etc
Se requieren 2 argumentos, usted introdujo 3
uso.py: directorio_origen directorio_destino

Validación de cadenas

Algunos de los métodos más utilizados para validar cadenas son:

isalnum() Devuelve True si la cadena es alfanumérica, de lo contrario False.

>>> cadena_alfanumerica = "El valor es 1000"
>>> cadena_alfanumerica.isalnum()
False
>>> cadena_alfanumerica = "awlpftawnju8mke4r5i9cfaw"
>>> cadena_alfanumerica.isalnum()
True

isalpha() Devuelve True si la cadena es alfabética, de lo contrario False.

>>> cadena_alfabetica = "Hola mundo 1000"
>>> cadena_alfabetica.isalpha()
False
>>> cadena_alfabetica = "Hola mundo"
>>> cadena_alfabetica.isalpha()
False
>>> cadena_alfabetica = "Hola"
>>> cadena_alfabetica.isalpha()
True

isdigit() Devuelve True si la cadena es numérica, de lo contrario False.

>> cadena_numerica = "12345"
>>> cadena_numerica.isdigit()
True
>>> cadena_numerica = "1 2 3 4 5"
>>> cadena_numerica.isdigit()
False
>>> cadena_numerica = "1.2"
>>> cadena_numerica.isdigit()
False

islower Devuelve True si la cadena contiene solamente minúsculas, de lo contrario False.

>>> cadena_minusculas = "Hola mundo"
>>> cadena_minusculas.islower()
False
>>> cadena_minusculas = "hola mundo"
>>> cadena_minusculas.islower()
True

isupper Develve True si la cadena contiene solamente mayúsculas, de lo contrario False.

>>> cadena_mayusculas = "Hola mundo"
>>> cadena_mayusculas.isupper()
False
>>> cadena_mayusculas = "HOLA MUNDO"
>>> cadena_mayusculas.isupper()
True

isspace Devuelve True si la cadena contiene solamente espacios en blanco, de lo contrario False.

>>> cadena_espacios = "hola mundo"
>>> cadena_espacios.isspace()
False
>>> cadena_espacios = " "
>>> cadena_espacios.isspace()
True
>>> cadena_espacios = " "
>>> cadena_espacios.isspace()
True

Como lo habrás notado validar datos es una tarea relativamente sencilla, pero muchas veces se deja de lado ya sea por falta de tiempo o por considerarlo trabajo de rutina, sin embargo, es importante realizarlo ya que es una buena práctica de la programación y te ahorrará muchos problemas cuando tus programas sean más complejos. Con esta nota hemos llegado al final de la temporada 3 de la serie Administración de sistemas GNU/Linux”, la siguiente temporada será de Scripting en Perl. ¡Hasta pronto!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *