[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