[pyar] [Consulta] Instrucción assert

Hugo Arregui hugo.arregui en gmail.com
Mie Jun 12 10:49:25 ART 2013


Yo uso mucho assert. Las aserciones son chequeos en runtime fuera del
flujo normal del programa, para validar la coherencia interna.

Supongamos una función calcularEdad(fecha_nacimiento); esta función es
parte de un sistema de lo q sea, no una librería de calculo de edad,
por lo tanto tiene ciertas pre y post condiciones, la precondición es
que sea una fecha valida, para hacerlo simple en este caso digamos q
sea una fecha del pasado. Y la post condición, es que sea una edad
valida, digamos >0.

def calcularEdad(fecha_nacimiento):
   assert fecha_nacimiento < now()
   edad = ...
   assert edad > 0
   return edad

Ahora, nótese algunas cuestiones:

1) Pequeña aclaración: estas condiciones nunca pueden darse una si y
otra no, pero a propósitos ilustrativos funcionan :-)

2) Si por alguna razón (digamos datos corruptos), hay una fecha en el
futuro, y calcularEdad es parte de un proceso, el error q obtengamos
durante desarrollo sera totalmente acotado:

   assert fail: fecha_nacimiento < now()

3) Si nuestro sistema tiene q ser rápido, todos estos chequeos tan
útiles en desarrollo son facilmente deshabilitados: es decir, testing
en runtime durante desarrollo y cero overhead en prod.

4) Nótese tb que no es equivalente el assert al raise Exception, dado
que una fecha de nacimiento invalida no es (en este caso), un flujo de
programa valido.

Saludos,
Hugo


More information about the pyar mailing list