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:
Te puede interesar:Cómo iterar sobre un diccionario en Pythontry:
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?
Te puede interesar:Trama de violín de Seaborn – Tutorial y ejemplosVarias 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?
Te puede interesar:Diagrama de caja de Seaborn – Tutorial y ejemplosEvitar 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».
Te puede interesar:Cómo establecer el rango del eje (xlim, ylim) en MatplotlibEs 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.
Te puede interesar:Cómo iterar sobre filas en un marco de datos de Pandas«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.