[pyar] [Programacion] input function

Ricardo Araoz ricaraoz en gmail.com
Mie Mar 7 19:34:00 ART 2012


El 07/03/12 13:00, fisa escribió:
> El día 7 de marzo de 2012 11:24, Claudio Freire
> <klaussfreire en gmail.com> escribió:
>> 2012/3/7 Ezequiel - <ezequielchan en gmail.com>:
>>> Que quiero decir con eso? que podes usar un try, no cuesta nada hasta
>>> que empiezan a existir exceptions en el medio, levantar toda la info
>>> necesaria es mas costosa y esta bien que no debas optimizar el código
>>> antes, pero para mi es mucho mas elegante y legible.
>> Y equivocado, en mi opinión.
>>
>> Las validaciones que hace int() no son fácilmente reproducibles, y no
>> hay real necesidad de reproducirlas, cuando que es perfectamente
>> esperable que int() tire excepción. Lo que está mal es:
>>
>> try:
>>     x = hacealgo_con_el_numero(int(raw_input(...)))
>> except:
>>     print "Meté un número"
>>
>> Pero simplemente porque estás protegiendo mucho más código del deseado
>> y atrapando cualquier cosa indiscriminadamente, escondiendo errores
>> más que recuperándote de los mismos.
>>
>> Lo correcto:
>>
>> x = raw_input(...)
>> try:
>>    x = int(x)
>> except ValueError:
>>    print "Meté un número"
>>
>> O sea, sólo atrapás el error que querés atrapar (ValueError), y sólo
>> protegés int(x).
>> _______________________________________________
>> 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
> IMHO
> Es verdad que en este caso se sigue haciendo necesario el try/except,
> porque no es simple reproducir todas las validaciones que haría int().
> Pero entiendo lo que quiso decir ezequiel y es muy cierto. Es bastante
> común ver abusos de try/except, donde es usado como estructura de
> control para cosas que no son su objetivo.
> Try/except sirve para capturar excepciones, para manejarlas con
> "gracia", pero capturar una exception es un proceso mucho más caro que
> resolver antes el camino con un if. El try/except debería ser el
> "último recurso" para las cosas que no pudimos evitar por caminos
> normales.
>
Es que la otra cosa que tiene de piola el try/except es que definís por
la mínima, permitiendo que CUALQUIER objeto que pueda ser procesado por
int() pueda ser aceptado. Si tengo que definir yo la validación entonces
estoy achicando el universo de cosas que puede procesar mi programa,
pues le agrego mis validaciones a las de int(). En cambio con un
try/except ValueError achico al mínimo posible el filtrado de objetos.





More information about the pyar mailing list