<jupyter_start><jupyter_text>Las excepcionesSon bloques de código excepcionales 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 anteriorTeníamos el caso en que leíamos un número por teclado, pero el usuario no introducía un número:<jupyter_code>n = float(input("Introduce un número: "))
m = 4
print("{}/{}={}".format(n,m,n/m))<jupyter_output>Introduce un número: aaa<jupyter_text>Creando la excepción - Bloques try y exceptPara prevenir el error, debemos poner el código propenso a error un bloque **try** y luego encadenaremos un bloque **except** para tratar la excepción:<jupyter_code>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")<jupyter_output>Introduce un número: aaa
Ha ocurrido un error, introduce bien el número<jupyter_text>Utilizando un while(true), podemos asegurárnos de que el usuario introduce bien el valorRepitiendo la lectura por teclado hasta que lo haga bien, y entonces rompemos el bucle con un break:<jupyter_code>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")<jupyter_output>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<jupyter_text>Bloque else en excepcionesEs 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:<jupyter_code>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<jupyter_output>Introduce un número: 10
10.0/4=2.5
Todo ha funcionado correctamente<jupyter_text>Bloque finally en excepcionesPor último es posible utilizar un bloque *finally* que se ejecute al final del código, **ocurra o no ocurra un error**:<jupyter_code>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<jupyter_output>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
{'fraction_non_alphanumeric': 0.08976329541961267, 'fraction_numerical': 0.00891484783276975, 'mean_word_length': 4.108320251177394, 'pattern_counts': {'":': 0, '<': 16, '<?xml version=': 0, '>': 16, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '8178', 'license': 'MIT', 'n_tokens_mistral': 1097, 'n_tokens_neox': 1118, 'n_words': 391, 'path': 'MaterialCursoPython/Fase 2 - Manejo de datos y optimizacion/Tema 07 - Gestion de errores/Apuntes/Leccion 2 (Apuntes) - Excepciones.ipynb', 'repo_name': 'mangrovex/CursoPython', 'size': '3253'}