Hola! En esta clase se hace un ejemplo en el que se tienen dos posibles tipos de excepciones
try:
notas = [7, 6, 7, 6, "10"]
resultado = promedio(notas)
except TypeError:
print("No fue posible calcular el promedio del estudiante. Solo se admiten valores numéricos!")
except ValueError as e:
print(e)
finally:
print("La consulta ha concluido")
En el video se menciona que, independientemente de si hay más de 4 elementos, el error que sale es el TypeError debido a la jerarquía de excepciones, sin embargo, esto no es cierto y depende de la implementación de la función
def promedio(lista: list=[0]) -> float:
''' Función para calcular el promedio de notas en una lista
lista: list, default [0]
Lista con las notas para calcular el promedio
return = calculo: float
Promedio calculado
'''
calculo = sum(lista) / len(lista)
if len(lista) > 4:
raise ValueError("La lista no puede poseer más de 4 notas")
return calculo
En este ejemplo, la función "sum" que usa la lista se usa antes de la instrucción en donde se valida la longitud de la lista, es por ese motivo que siempre se lanza esta excepción, porque la otra instrucción no alcanza a ejecutarse.
Para que el otro error pueda ser detectado por el "try" que tenemos arriba, la función debería primero validar la longitud de la lista, de esta manera:
def promedio(lista: list=[0]) -> float:
''' Función para calcular el promedio de notas en una lista
lista: list, default [0]
Lista con las notas para calcular el promedio
return = calculo: float
Promedio calculado
'''
if len(lista) > 4:
raise ValueError("La lista no puede poseer más de 4 notas")
calculo = sum(lista) / len(lista)
return calculo
Con esto hecho, ahora sí se obtendrán dos errores diferentes si la ejecución fuese
resultado = promedio([7, 6, 7, 6, "10"]) # ValueError
resultado = promedio([7, 6, 7, "10"]) # TypeError