13. Excepciones - manuelmarinduque/Apuntes_Python_3 GitHub Wiki
Su utilidad es optimizar la ejecución del programa al prevenir errores.
Tomado de Excepciones I. Vídeo 21
Las excepciones son errores que ocurren durante la ejecución del programa. La sintaxis del código es correcta pero durante la ejecución ocurre algo inesperado, no previsto. Por ejemplo:
-
División por cero: ZeroDivisionError
-
Se han acabado los elementos de una estructura iterable: IndexError
-
Operar con variables de tipo diferente: TypeError
Al haber una excepción el programa cae y las líneas siguientes no se ejecutan. Puede ser que la línea que produjo el error no sea vital pero las siguientes que no se ejecutan sí sean importantes y tengan que ejecutarse. Los errores se pueden controlar para que la ejecución del programa continúe. Es lo que se conoce como manejo o control de excepciones.
try:
# Bloque de código susceptible a fallar.
# Controlar el error:
except tipo_error: # Tomado de la pila de llamadas.
# Acción a hacer si se produce ese tipo de error.
# Opcional
finally:
# Código a ejecutar se produzcan errores o no.
Lectura: Intente realizar el bloque de código susceptible a fallar, si no es capaz, proceda con una acción.
Nota: La claúsula try debe estar siempre acompañado de la claúsula except o finally.
Es el mensaje que aparece tras producirse un error. Contiene información relevante como la instrucción, número de línea que lo produce y el tipo de error, el cual sirve para poder controlar la excepción mediante la instrucción except.
Tomado de Excepciones II. Vídeo 22
Se muestra cómo capturar varias excepciones a la vez mediante el uso de sucesivas instrucciones except y una forma para que el valor que ingrese el usuario sea válido para realizar operaciones mediante el uso de un bucle while infinito:
def divide():
# Bloque
while True:
try:
valor1 = float(input("Introduce el primer valor: "))
valor2 = float(input("Introduce el segundo valor: "))
return valor1/valor2 # Sale del ciclo. También puede usarse la instrucción break.
# Varias instrucciones except para capturar excepciones:
except ValueError:
print("El valor ingresado es erróneo")
except ZeroDivisionError:
print("No se puede dividir por cero")
print("La división es: {}".format(divide()))
Su función es ejecutar siempre lo que esté en su interior, se produzca o no una excepción. Un caso útil es en el manejo de bases de datos en el que se debe asegurar que ocurra lo que ocurra siempre se cierre la conexión.
Se puede utilizar en conjunto try y finally. En tal caso, si se produce un error, no se ejecuta lo de dentro del try pero se ejecutaría lo de dentro de finally. Por último se mostraría la pila de llamada con los fallos ocurridos.
Tomado de Excepciones III. Vídeo 23
Su utilidad está al emplear la Programación Orientada a Objetos. La creación es mediante la instrucción raise seguido del nombre de la excepción (pero tiene que estar previamente definido en una clase) y entre los paréntesis puede ir un mensaje descriptivo personalizado. Nuestras propias excepciones pueden ser luego controladas por un try y except.
En este ejemplo se hace uso de la excepción ValueError, ya que está definida en una clase:
import math
def calcula_raiz(num1):
if num1 < 0:
raise ValueError ("El número no puede ser negativo")
else:
return math.sqrt(num1)
op1 = int(input("Introduce un número: "))
try:
print(calcula_raiz(op1))
except ValueError as ErrorDeNegativo: # Dar un alias al error.
print(ErrorDeNegativo)