[Python-es] Mejora de codigo.

Angel Lis anlismon en gmail.com
Jue Jul 6 05:32:36 EDT 2017


Hola César,
tu solución es bastante correcta, lo único que te diría es que el except
genérico, puede darte problemas. Deberías capturar la excepción que
quieres.Me explico:

Imaginate que usas tu función, pero no has hecho un
>from datetime import datetime
si no que lo has importado como
>import datetime
o incluso no lo has importado ( siempre se nos puede olvidar )

Bueno, en ese caso, siempre te va a dar un False, aunque le pases un ts
correcto, ya que la excepción NameError o AttributeError la estas
capturando y enmascarando. Y eso es fuente de bugs muy "jodios" de cazar.

podrías usar tu función como:

def is_timestamp(var):
    try:
        datetime.fromtimestamp(var)
        return True
    except TypeError:
        return False
    except OSError:
        #llamada con un float("nan")
        return False
    except OverflowError:
        #llamada con un float("inf")
        return False



aunque si no quieres, o estas en contra de usar tantos try/except, también
puedes comprobar si es un valor numérico, aunque el float("nan") y el
float("inf") tendrías que capturarlo también:

def is_timestamp_no_try_except(var):
    return isinstance(var,float) | isinstance(var,int)


Un saludo.

El 5 de julio de 2017, 17:28, César García Tapia <tapia en openshine.com>
escribió:

> ¿Por qué no te gusta? Las excepciones sirven exactamente para eso. Que se
> suelan usar para control de errores no significa que sea su único uso
> correcto.
>
> Eso sí, siempre debes usar la excepción más específica posible, así que en
> vez de "except" deberías poner "except TypeError", que es la excepción que
> lanza fromtimestamp() si le pasas algo que no sea un número.
>
> Un saludo.
>
>
> *César García Tapia*
> Director técnico
> Tlf: +34 663 273 481 <+34+663+273+481>
> Skype: cesargarciatapia
> <#m_-1228148143883588336_UNIQUE_ID_SafeHtmlFilter_>
> Web: https://www.openshine.com/
>
> El 3 de julio de 2017, 17:41, Nicolas lino <nicolaslino1 en gmail.com>
> escribió:
>
>> Buenas.
>>
>> A alguien se le ocurre una manera mas prolija o una librería para hacer
>> lo siguiente:
>>
>>
>> >>> a
>> 1499095933.289
>> >>> b
>> 'asdasdsa'
>> >>> def is_timestamp(var):
>> ...   try:
>> ...     datetime.fromtimestamp(var)
>> ...     return True
>> ...   except:
>> ...     return False
>> ...
>> >>> is_timestamp(a)
>> True
>> >>> is_timestamp(b)
>> False
>>
>>
>> No me gusta la idea de usar un try y forzar una excepción para validar si
>> es un timestamp. Pero no se me a ocurrido nada mejor.
>>
>>
>> Gracias!
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
>
>


-- 
--
Liso^TLOTB
Bite my shiny metal ass
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20170706/9913ec8e/attachment.html>


Más información sobre la lista de distribución Python-es