[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