[pyar] [Consulta] Instrucción assert
Apokalyptica Painkiller
apokalyptica79 en gmail.com
Mie Jun 12 14:00:42 ART 2013
Buenísimo Pedro, gracias
El 12 de junio de 2013 13:53, Pedro Jose Pezzarini <jose2190 en gmail.com>escribió:
> 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
>>
>
>
> _______________________________________________
> 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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130612/0e2570e9/attachment-0001.html>
More information about the pyar
mailing list