Python: captura múltiples excepciones en una línea

P

Introducción

En este artículo vamos a echar un vistazo a la cláusula try / except, y específicamente cómo puede detectar múltiples excepciones en una sola línea, así como cómo usar la suppress() método.

Ambas técnicas le ayudarán a escribir un código más accesible y versátil que se adhiera a SECO (no te repitas) principios.

Comencemos mirando el problema:

try:
    do_the_thing()
except TypeError as e:
    do_the_other_thing()
except KeyError as e:
    do_the_other_thing()
except IndexError as e:
    do_the_other_thing()

Brutal.

Como podemos ver, esto es muy MOJADO código, repetimos la misma invocación varias veces. Prácticas como esta pueden hacer que la lectura y la refactorización de nuestro código sean una pesadilla viviente.

En lugar de escribir excepciones una tras otra, ¿no sería mejor agrupar todos estos controladores de excepciones en una sola línea?

Varias excepciones

Si solo está aquí para obtener una respuesta rápida, es simple: use una tupla.

Todos los errores contenidos en la tupla de la línea de excepción se evaluarán juntos:

try:
    do_the_thing()
except (TypeError, KeyError, IndexError) as e:
    do_the_other_thing()

Fácil, ¿verdad?

Evitar malas prácticas

“Los errores nunca deben pasar en silencio”. – El Zen de Python.

Las cláusulas try / except son probablemente el patrón más mal utilizado en Python.

Usados ​​incorrectamente, terminan siendo el cliché de los borrachos y las farolas, siendo usados ​​solo cuando el intérprete de Python comienza a villancicos los “12 Errores de Navidad”.

Es muy tentador poner un try y una mera excepción en un problema para “hacer que desaparezca”. Al hacer eso, estamos efectivamente barriendo las excepciones debajo de la alfombra, lo cual es una lástima, especialmente porque pueden ser maravillosamente útiles para recuperarse de errores potencialmente fatales o para arrojar luz sobre errores ocultos.

Es por eso que cuando use cláusulas except, siempre debe asegurarse de especificar los errores que sabe que podría encontrar y excluir los que no.

Dejar que su programa falle está bien, incluso es preferible, a fingir que el problema no existe.

“Los errores nunca deben pasar en silencio … a menos que se silencian explícitamente”.

Sin embargo, una vez en una luna azul, cuando tenga la oportunidad de ignorar el manejo de excepciones, puede usar suppress():

from contextlib import suppress

with suppress(TypeError, KeyError, IndexError):
    do_the_thing()

los suppress() El método toma una serie de excepciones como argumento y realiza un intento / excepción / pase con esos errores. Como puede ver, también le permite escribir varias excepciones en una sola línea.

Esto le permite evitar escribir un try / except / pass manualmente:

try:
    do_the_thing()
except (TypeError, KeyError, IndexError) as e:
    pass

Mejor aún, también es estándar en cualquier versión de Python 3.4 y superior!

Conclusión

En este artículo, hemos cubierto cómo manejar múltiples excepciones en una sola línea. También repasamos brevemente algunas malas prácticas de ignorar excepciones y usamos la supress() función para suprimir excepciones explícitamente.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad