Sentencias try...except anidadas en Python

Vaibhav Vaibhav 22 enero 2022
Sentencias try...except anidadas en Python

La declaración try...except se usa en Python para detectar excepciones o ejecutar algún código propenso a errores. Todos los lenguajes de programación tienen esta característica en estos días, pero en Python, se utiliza con estas palabras y está representado por palabras clave try...except, respectivamente. Aparte de try...except, otra palabra clave, a saber, finally, también podría usarse junto con ellos.

Al igual que los bucles for, estas declaraciones try, catch y finally también se pueden anidar, y en este artículo hablaremos de ello.

Declaraciones try...except anidadas en Python

Como se mencionó anteriormente, podemos anidar estas declaraciones de la misma manera que anidamos bucles for. Consulte el siguiente código para ver un ejemplo.

a = {"a": 5, "b": 25, "c": 125}

try:
    print(a["d"])
except KeyError:
    try:
        print("a:", a["a"])
    except:
        print("No value exists for keys 'a' and 'd'")
    finally:
        print("Nested finally")
finally:
    print("Finally")

Producción :

a: 5
Nested finally
Finally

Como podemos ver, el programa anterior primero inicializa un diccionario con algunos pares clave-valor y luego intenta acceder al valor de la clave d. Dado que no existe un par clave-valor, se genera una excepción KeyError y la declaración except la detecta. Luego, los intérpretes ejecutan el código bajo el bloque try anidado. Dado que existe un valor para la tecla a, se imprime en la consola y se ejecuta el código debajo de la instrucción anidada finally. Por último, se ejecuta el código debajo de la declaración exterior finally.

Esto significa que podemos poner las declaraciones try, catch y finally debajo de cualquier declaración de try, catch y finally. Entienda esto con un ejemplo. Escribiremos un código que tenga declaraciones try, catch y finally y todas estas declaraciones también tienen declaraciones try, catch y finally debajo de ellas.

a = {
    "a": 5,
    "b": 25,
    "c": 125,
    "e": 625,
    "f": 3125,
}

try:
    try:
        print("d:", a["d"])
    except:
        print("a:", a["a"])
    finally:
        print("First nested finally")
except KeyError:
    try:
        print("b:", a["b"])
    except:
        print("No value exists for keys 'b' and 'd'")
    finally:
        print("Second nested finally")
finally:
    try:
        print("c:", a["c"])
    except:
        print("No value exists for key 'c'")
    finally:
        print("Third nested finally")

Producción :

a: 5
First nested finally
c: 125
Third nested finally

Como podemos ver, primero se ejecuta el bloque exterior try. Como no se encuentra ningún valor para la clave d, se ejecuta el código debajo de la instrucción anidada except y la anidada finally. Dado que el bloque exterior try no obtuvo ninguna excepción durante la ejecución, se omite su bloque except y se ejecuta el código debajo del bloque exterior finally.

Incluso podemos llevar esto más lejos si queremos y crear n niveles de declaraciones anidadas try, catch y finally. Pero a medida que aumenta el número de niveles anidados, el flujo de control o el flujo de ejecución se vuelve un poco complicado e inmanejable. Se vuelve un desafío navegar a través de las sentencias try, catch y finally.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

Artículo relacionado - Python Statement