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

    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.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *