[Python-es] Mejora de codigo.

Angel Lis anlismon en gmail.com
Jue Jul 6 05:34:23 EDT 2017


Perdón César,
la respuesta era para Nicolas ;)

El 6 de julio de 2017, 11:32, Angel Lis <anlismon en gmail.com> escribió:

> 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_8858629466002260070_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
>



-- 
--
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/730eb11c/attachment.html>


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