Libro Python Aplicado de Eugenia Bahit. GNU/Linux, ciencia de datos, y desarrollo web

Banner de Python Aplicado

Captura y manejo de excepciones


Cita con formato IEEE:
E. Bahit, "Captura y manejo de excepciones", in Python Aplicado, 4th ed., EBRC Publisher, 2022, pp. 107–118

Cita con formato APA 7:
Bahit, E. (2022). Captura y manejo de excepciones. In Python Aplicado (4th ed., pp. 107–118). EBRC Publisher.

Cita en línea:
(Bahit, 2022)

El código fuente de un programa puede fallar cuando se escribe mal la sintaxis, o se comete algún error de escritura. Este tipo de errores son detectados por el intérprete, antes de la ejecución del código.

Existen casos en los que el fallo no se produce por un error de quien ha escrito el código. En estos casos, y bajo determinadas circunstancias, el intérprete lanza un error, detectado en tiempo de ejecución, ya que el mismo, como se ha dicho, depende de las circunstancias particulares en las que el código se está ejecutando. Esas circunstancias son diversas, pero algunos ejemplos frecuentes pueden ser:

  • Una función que falla porque recibe unos parámetros no esperados;
  • Una operación de cómputo falla porque el valor obtenido en tiempo de ejecución no es del tipo esperado;
  • Una conexión no puede realizarse por factores externos, entre muchos otros ejemplos.

A este tipo de errores detectados en tiempo de ejecución, se los denomina excepciones, y pueden capturarse y manejarse a conveniencia, desde el propio código fuente.

El manejo de excepciones en Python, se puede llevar a cabo mediante la estructura try / except, y la declaración raise. Estas declaraciones se explican a continuación.

Uso básico de la estructura try / except

La estructura try / except permite capturar excepciones que de otro modo provocarían la finalización abrupta del script, cuando una excepción sea lanzada.

Cuando una instrucción tiene la posibilidad de fallar (normalmente, cuando depende de valores obtenidos al vuelo), puede colocarse el código dentro de la estructura try, y utilizarse except para ejecutar una acción en caso de que el intento de ejecución de código del try, falle. Su sintaxis podría interpretarse como la siguiente:

intentar:
    ejecutar esto
si falla:
    hacer esto otro

Pasado a lenguaje Python:

try:
    # instrucción que puede fallar
except:
    # instrucción a ejecutar en caso de que el try falle

También es posible capturar el tipo de excepción lanzada:

try:
    # instrucción que puede fallar
except TipoDeExcepción1:
    # instrucción a ejecutar en caso de que se produzca
    # una excepción de tipo TipoDeExcepcion1
except TipoDeExcepción2:
    # instrucción a ejecutar en caso de que se produzca
    # una excepción de tipo TipoDeExcepcion2

También es admisible capturar más de un tipo de excepción de forma simultánea:

try:
    # instrucción que puede fallar
except (TipoDeExcepción1, TipoDeExcepción2):
    # instrucción a ejecutar en caso de que se produzca
    # una excepción de tipo TipoDeExcep...

E incluso, puedo capturarse una descripción del error, aunque no se conozca el tipo de excepción: