[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