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 鈥嬧媔ncorrectamente, terminan siendo el clich茅 de los borrachos y las farolas, siendo usados 鈥嬧媠olo 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 *