[python-madrid] Envio de PEP

Juan Antonio Zaratiegui Vallecillo zaravalle at gmail.com
Wed Jul 13 07:29:35 CEST 2011


On 12/07/11 17:59, piranna at gmail.com wrote:
<...>
> La primera es mas o menos facilmente aceptable, y consiste en añadir
> la posibilidad de añadir ramas 'elif' a la excepcion. Un ejemplo
> (inventado):
> <...>
> try:
>      user = GetUser()
> except ErrorDB:
>      print "error al obtener usuario"
> elif user == 0:
>      print "Administrador"
> else:
>      print "usuario normal"
> finally:
>      print "adios"
>
> Hace el try un poco mas complejo e incluso pedante, pero a nivel
> interno (bytecode) deberian ser completamente iguales, y ademas es
> totalmente retrocompatible.
Esta propuesta, que podría parecer 'syntactic sugar', resulta ser 
realmente, 'syntactic cyanide'.
Si la estructura del bloque try no es tan corta como en este caso, una 
lectura rápida en una revisión del código (por ejemplo, a la captura de 
'bugs'), nos llevaría a identificar incorectamente el último bloque como 
el caso de la excepción no enumerada. Sería un infierno.

Hay que tener muy claro que la sintaxis original nos identifica 
inmediatamente dos niveles de proceso distintos: el de la excepción y el 
de la condición. La realimentación visual de la indentación nos ayuda. 
En el caso propuesto es justo al contrario: la realimentación visual nos 
engaña.

Creo que mi respuesta a esta propuesta es muy clara 'Thumbs down'

> La segunda es un poco mas conflictiva, porque cambia un poco mas la
> sintaxis para un caso expecifico. Consiste en que para una excepcion
> (o grupo de excepciones) en concreto para las que no queremos que haga
> nada no haya que indicar una rama vacia con 'pass':
>
> try:
>      user = GetUser()
> except ErrorDB:
>      pass
> else:
>      print "hola",user
>
> Mi idea es que para esas excepciones para las que no se necesite hacer
> nada, indicarlas de alguna manera. Mi idea es hacerlo en el try:
>
> try ErrorDB:
>      user = GetUser()
> else:
>      print "hola",user
>
> Obviamente, tambien se puede usar un grupo de excepciones:
>
> try (ErrorDB,SocketError):
>      user = GetUser()
> else:
>      print "hola",user
>
>
Esta segunda, no me parece tan criticable como la primera. Sólo hacer 
notar que, en el proceso de desarrollo, muchas veces se incluyen trazas 
en vez de 'pass' por razones de depuración o 'profiling', por lo que 
esta nueva sintaxis tendería a no ser usada porque no sale naturalmente 
como evolución del código en desarrollo

saludos

Zarea

-- 
*Q:* Why did the mathematician name his dog "Cauchy"?
*A:* Because he left a residue at every pole.

-- 
Grupo de usuarios de python ubicados en Madrid
http://groups.google.es/group/python-madrid
http://python-hispano.org/PythonMadrid
Para darte de baja del grupo envía un mensaje a python-madrid+unsubscribe at googlegroups.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.es.python.org/pipermail/madrid/attachments/20110713/bc92a708/attachment.html>


More information about the Madrid mailing list