Saltar a contenido
 No os perd谩is mi futuro contenido, seguidme en y Youtube 馃榿

Excepciones

Las excepciones son bloques de c贸digo que nos permiten continuar con la ejecuci贸n de un programa pese a que ocurra un error.

Siguiendo con el ejemplo de la lecci贸n anterior, ten铆amos el caso en que le铆amos un n煤mero por teclado, pero el usuario no introduc铆a un n煤mero:

Note

n = float(input("Introduce un n煤mero: "))
m = 4
print("{}/{} = {}".format(n,m,n/m))
Introduce un n煤mero: aaa

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-14-c0e7fd4a26a9> in <module>()
----> 1 n = float(input("Introduce un n煤mero: "))
    2 m = 4
    3 print("{}/{} = {}".format(n,m,n/m))

ValueError: could not convert string to float: 'aaa'

Bloques try - except

Para prevenir el fallo debemos poner el c贸digo propenso a errores en un bloque try y luego encadenar un bloque except para tratar la situaci贸n excepcional mostrando que ha ocurrido un fallo:

Note

try:
    n = float(input("Introduce un n煤mero: "))
    m = 4
    print("{}/{} = {}".format(n,m,n/m))
except:
    print("Ha ocurrido un error, introduce bien el n煤mero")
Introduce un n煤mero: aaa
Ha ocurrido un error, introduce bien el n煤mero

Como vemos esta forma nos permite controlar situaciones excepcionales que generalmente dar铆an error y en su lugar mostrar un mensaje o ejecutar una pieza de c贸digo alternativo.

Podemos aprovechar las excepciones para forzar al usuario a introducir un n煤mero haciendo uso de un bucle while, repitiendo la lectura por teclado hasta que lo haga bien y entonces romper el bucle con un break:

Note

while(True):
    try:
        n = float(input("Introduce un n煤mero: "))
        m = 4
        print("{}/{} = {}".format(n,m,n/m))
        break  # Importante romper la iteraci贸n si todo ha salido bien
    except:
        print("Ha ocurrido un error, introduce bien el n煤mero")
Introduce un n煤mero: aaa
Ha ocurrido un error, introduce bien el n煤mero
Introduce un n煤mero: sdsdsd
Ha ocurrido un error, introduce bien el n煤mero
Introduce un n煤mero: sdsdsd
Ha ocurrido un error, introduce bien el n煤mero
Introduce un n煤mero: sdsd
Ha ocurrido un error, introduce bien el n煤mero
Introduce un n煤mero: 10
10.0/4 = 2.5

Bloque else

Es posible encadenar un bloque else despu茅s del except para comprobar el caso en que todo funcione correctamente (no se ejecuta la excepci贸n).

El bloque else es un buen momento para romper la iteraci贸n con break si todo funciona correctamente:

Note

while(True):
    try:
        n = float(input("Introduce un n煤mero: "))
        m = 4
        print("{}/{} = {}".format(n,m,n/m))
    except:
        print("Ha ocurrido un error, introduce bien el n煤mero")
    else:
        print("Todo ha funcionado correctamente")
        break  # Importante romper la iteraci贸n si todo ha salido bien
Introduce un n煤mero: 10
10.0/4 = 2.5
Todo ha funcionado correctamente

Bloque finally

Por 煤ltimo es posible utilizar un bloque finally que se ejecute al final del c贸digo, ocurra o no ocurra un error:

Note

while(True):
    try:
        n = float(input("Introduce un n煤mero: "))
        m = 4
        print("{}/{} = {}".format(n,m,n/m))
    except:
        print("Ha ocurrido un error, introduce bien el n煤mero")
    else:
        print("Todo ha funcionado correctamente")
        break  # Importante romper la iteraci贸n si todo ha salido bien
    finally:
        print("Fin de la iteraci贸n") # Siempre se ejecuta
Introduce un n煤mero: aaa
Ha ocurrido un error, introduce bien el n煤mero
Fin de la iteraci贸n
Introduce un n煤mero: 10
10.0/4 = 2.5
Todo ha funcionado correctamente
Fin de la iteraci贸n

脷ltima edici贸n: 26 de Septiembre de 2018