[pyar] [Consulta] Instrucción assert
Ricardo Aráoz
ricaraoz en gmail.com
Vie Jun 14 10:13:46 ART 2013
El 12/06/13 10:49, Hugo Arregui escribió:
> 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
Yo tenía entendido que si alguna precondición no se cumple entonces el
contrato no obliga a nada. Por ende que no hace falta controlar las
precondiciones. En cuanto a las postcondiciones, ¿no es más claro
mantener todo el código de chequeo fuera del código principal y usar
alguna herramienta de testing? Estas están hechas específicamente para
controlar postcondicones, me parece.
> 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.
¿Entonces por qué no usar alguna herramienta de testing?
> 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.
Pero las excepciones son precisamente para eso. Para manejar casos que
el programa no puede manejar.
More information about the pyar
mailing list