Python Para Principiantes (VII) - Manejo de excepciones

Manejo de excepciones

Índice:

Definición

Las excepciones son errores que ocurren durante la ejecución del programa. Cuando ocurre una excepción el programa se detiene.

Veamos algunas excepciones.

1
2
#Cuando intentamos usar una variable que no hemos declarado tenemos una excepción
print(k)
---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-1-d29f6fbfa237> in <module>
      1 #Cuando intentamos usar una variable que no hemos declarado tenemos una excepción
----> 2 print(k)


NameError: name 'k' is not defined
1
2
3
#Cuando dividimos un valor por cero se produce otra excepción.
print(29/0) #Aquí el programa se detiene
print("hola mundo")
---------------------------------------------------------------------------

ZeroDivisionError                         Traceback (most recent call last)

<ipython-input-2-3d6e79215e9d> in <module>
      1 #Cuando dividimos un valor por cero se produce otra excepción.
----> 2 print(29/0) #Aquí el programa se detiene
      3 print("hola mundo")


ZeroDivisionError: division by zero

Python tiene varias excepciones definidas por defecto.

Alguna de ellas son:

  • ImportError: cuando falla al momento de importar un módulo.
  • IndexError: cuando queremos acceder a un índice (“elemento de una lista por ejemplo”) que no existe.
  • NameError: cuando usamos una variable que no esta declarada.
  • SyntaxError: cuando hay un error en la sintaxis del programa.
  • TypeError: cuando hacemos una operación con tipos que no corresponden.
  • ValueError: cuando los tipos corresponden pero el valor es inapropiado.

Manejando las excepciones

Para manejar las excepciones usamos tres palabras reservadas. try - except - finally

1
2
3
4
try: #Intenta ejecutar el siguiente bloque de código
    print(25/0) #Recordemos que la divisón por cero no está definida. Dará una excepción.
except: #Si la ejecución del bloque try dió un error, ejecuta el bloque except
    print("Algo falló")
Algo falló

Capturando una excepción específica

La declaración except nos permite capturar una excepción específica. A modo de ejemplo, sabemos que la división por cero genera la excepción ZeroDivisionError.

1
2
3
4
try: #Intenta ejecutar el siguiente bloque de código
    print(25/0) #Recordemos que la divisón por cero no está definida. Dará una excepción.
except ZeroDivisionError: #Si el bloque try genera una excepcion ZeroDivisionError ejecutará el bloque except
    print("Recuerde que la división por cero no está definida")
Recuerde que la división por cero no está definida
1
2
3
4
try: #Intenta ejecutar el siguiente bloque de código
    print(x) #x no esta declarada, dará una excepción.
except NameError: #Si el bloque try genera una excepcion NameError ejecutará el bloque except
    print("La variable no está declarada")
La variable no está declarada

Múltiples excepciones

Como un bloque de código puede dar múltiples errores podemos capturar todas las excepciones que necesitemos.

1
2
3
4
5
6
7
8
try: #Intenta ejecutar el siguiente bloque de código
    print(x) #x no esta declarada, dará una excepción.
except NameError: #Si el bloque try genera excepción NameError ejecutará lo siguente 
    print("La variable no está declarada")
except ZeroDivisionError: #Si genera una excepcion ZeroDivisionError ejecutará
    print("Recuerde que la división por cero no está definida")
except: #Si genera algun error y no lo definimos anteriormente ejecuta este bloque
    print("Ocurrió algun error")
La variable no está declarada

Uso del else en las excepciones.

Podemos hacer uso de la declaración else para generar un bloque de código que se ejecutará si no se generaron excepciones durante la ejecución del bloque try. Esta declaración es opcional.

1
2
3
4
5
6
7
8
9
try: #Intenta ejecutar el siguiente bloque de código
    x = 10
    print(x) 
except NameError: #Si el bloque try genera una excepcion NameError ejecutará el bloque except
    print("La variable no está declarada")
except: #Si genera algun error y no lo definimos anteriormente ejecuta este bloque
    print("Ocurrió algun error")
else: #Se va a ejecutar si el bloque try no genera excepciones.
    print("Todo fue bien")
10
Todo fue bien

Palabra reservada finally

La declaración finally permite ejecutar un bloque de código independientemente del resultado de try (no importa si genera excepciones o no). Este bloque se ejecutará siempre. Esta declaración es opcional.

1
2
3
4
5
6
try:
  print(z1)
except:
  print("Algo fue mal")
finally:
  print("Este bloque se ejecuta si o si") 
Algo fue mal
Este bloque se ejecuta si o si

Declaración raise.

La declaración raise nos permite, a los programadores, generar excepciones.

1
2
3
4
5
#Si queremos generar una excepcion cuando un valor es menor a diez

x = 2
if(x<10):
    raise Exception("Es menor a diez") #Esto es una excepción genérica
---------------------------------------------------------------------------

Exception                                 Traceback (most recent call last)

<ipython-input-14-5b4defbccf5c> in <module>
      3 x = 2
      4 if(x<10):
----> 5     raise Exception("Es menor a diez")


Exception: Es menor a diez
1
2
3
4
5
# Si es de un tipo distinto al que necesitamos
x = "uno"

if type(x) is not int:
  raise TypeError("Solo están permitidos los valores enteros") 
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-19-7ada38e8fc71> in <module>
      3 
      4 if type(x) is not int:
----> 5   raise TypeError("Solo estan permitidos los valores enteros")


TypeError: Solo estan permitidos los valores enteros
updatedupdated2021-02-032021-02-03