[pyar] [Consulta] Instrucción assert
Pedro Jose Pezzarini
jose2190 en gmail.com
Mie Jun 12 13:53:05 ART 2013
Totalmente de acuerdo @Santiago Basulto. Creo que el punto medio, es ser lo
más proximo al determinismo posible.
Yo utilizo mucho asserts mediante una validación por heredado, o mediante
relación de métodos por un manipulador, en los puntos críticos de un
sistema.
Entonces podés habilitar/deshabilitar el manejo de assert en todo el
sistema con un cambio de estado (mediante herencia, obviamente teniendo
control de cada objeto en particular).
O mediante relación de métodos, podés manipular y enlazar metodos debug
particulares para una sección del sistema.
por ejemplo:
class MainWatcher(object):
"""docstring for MainWatcher"""
def __init__(self, debug = False):
self.debug = debug
def setDebug(self, debugState):
if(isinstance(debugState, bool)):
self.debug = debugState
elif(isinstance(debugState, int)):
if(debugState > 0):
self.debug = True
else:
self.debug = False
else:
assert isinstance(debugState, bool)
assert isinstance(debugState, int)
def inDebug(self):
return(self.debug)
def getDebugMethod(self):
return(self.inDebug)
class HumanAge(object):
"""docstring for HumanAge"""
def __init__(self, mainWatcherDebugger):
super(HumanAge, self).__init__()
self.mainWatcherDebugger = mainWatcherDebugger
def validAge(self, age):
if (isinstance(age, int)):
if (age in range(0,100)):
rtnValue = True
else:
rtnValue = False
if (self.mainWatcherDebugger()):
assert (isinstance(age, int))
return(rtnValue)
debug = MainWatcher(True)
edadHumana = HumanAge(debug.getDebugMethod)
edadHumana.validAge(0)
edadHumana.validAge(-1)
Espero te sirva de utilidad.
Saludotes!
El 12 de junio de 2013 11:10, Apokalyptica Painkiller <
apokalyptica79 en gmail.com> escribió:
> Buenísimo tu ejemplo Hugo, muchísimas gracias, y gracias Federico por los
> links :)
>
>
> El 12 de junio de 2013 10:49, Hugo Arregui <hugo.arregui en gmail.com>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
>>
>> 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
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
>
> --
> I live each day
> Like it's my last
> I live for rock and roll
> I never look back
>
> I'm a rocker
> Do as I feel as I say
> I'm a rocker
> And no one can take that away
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130612/aaa00d81/attachment.html>
More information about the pyar
mailing list