[python-madrid] Envio de PEP

piranna at gmail.com piranna at gmail.com
Tue Jul 12 17:59:45 CEST 2011


Llevo ya unas semanas queriendo enviar un PEP para añadir un par de
nuevas sintaxis al lenguaje y por examenes y demas no he podido
hacerlo. Ahora tengo tiempo pero no se ni como hacerlo (aunque me he
leido el PEP-1 no ha terminado de quedarme claro) ni si realmente
serian bien acogidas las ideas, asi que os las pongo por aqui por si
podeis echarme una mano. Ambas estan relaccionadas con la sintaxis del
tratamiento de excepciones y no modifican en absoluto ni el bytecode
ni el rendimiento, solo es un poco mas de "azucar sintactico" :-P

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"
else:
    if user == 0:
        print "Administrador"
    else:
        print "usuario normal"
finally:
    print "adios"

Ese 'else if' dejandolo todo indentado no me parece muy agradable,
sobretodo teniendo en cuenta que el 'else' recuerda a la sintaxis del
if-elif-else y por instinto lo suyo seria usarlo, lo cual para dejarlo
mas "bonito" y mas intuitivo mi propuesta es cambiar la sintaxis del
try-except-else-finally por try-except-elif-else-finally tal y como
muestro a continuacion:

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.


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

Al igual que la anterior, esta solo es para añadir azucar sintactico e
internamente serian iguales a las versiones antiguas, aunque esta
ultima si que añadiria mas complejidad en el parser. Obviamente, ambas
proposiciones son compatibles. Unificandolas la sintaxis quedaria asi:

try ErrorDB:
    user = GetUser()
elif user == 0:
    print "Administrador"
else:
    print "usuario normal"
finally:
    print "adios"

En fin, comentadme que os parecen, si hay que mejorarlas en algo y
como enviarlas... :-D

-- 
"Si quieres viajar alrededor del mundo y ser invitado a hablar en un
monton de sitios diferentes, simplemente escribe un sistema operativo
Unix."
– Linus Tordvals, creador del sistema operativo Linux

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



More information about the Madrid mailing list