Cómo comprobar si se ha generado una excepción específica en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si se ha generado una excepción específica en Python. El laboratorio se centra en comprender los diferentes tipos de excepciones y cómo manejarlas de manera efectiva.

Explorarás tipos de excepciones comunes como TypeError, NameError, IndexError, KeyError, ValueError y FileNotFoundError a través de ejemplos prácticos en un script de Python. El laboratorio te guiará en la creación de un archivo exceptions_demo.py y en la adición de código que demuestre cómo se generan y capturan cada tipo de excepción utilizando bloques try...except.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ErrorandExceptionHandlingGroup(["Error and Exception Handling"]) python/ErrorandExceptionHandlingGroup -.-> python/catching_exceptions("Catching Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/raising_exceptions("Raising Exceptions") python/ErrorandExceptionHandlingGroup -.-> python/custom_exceptions("Custom Exceptions") subgraph Lab Skills python/catching_exceptions -.-> lab-559566{{"Cómo comprobar si se ha generado una excepción específica en Python"}} python/raising_exceptions -.-> lab-559566{{"Cómo comprobar si se ha generado una excepción específica en Python"}} python/custom_exceptions -.-> lab-559566{{"Cómo comprobar si se ha generado una excepción específica en Python"}} end

Aprende sobre Tipos de Excepciones

En este paso, aprenderás sobre diferentes tipos de excepciones en Python. Las excepciones son eventos que interrumpen el flujo normal de ejecución de un programa. Comprender los tipos de excepciones es crucial para manejar los errores de manera efectiva.

Python tiene muchas excepciones integradas, y también puedes crear las tuyas propias. Aquí hay algunos tipos de excepciones comunes:

  • TypeError: Se levanta cuando se aplica una operación o función a un objeto de tipo inapropiado.
  • NameError: Se levanta cuando un nombre no se encuentra en el espacio de nombres local o global.
  • IndexError: Se levanta cuando un subíndice de secuencia está fuera de rango.
  • KeyError: Se levanta cuando una clave de diccionario no se encuentra.
  • ValueError: Se levanta cuando una operación o función recibe un argumento que tiene el tipo correcto pero un valor inapropiado.
  • FileNotFoundError: Se levanta cuando se solicita un archivo o directorio pero no se puede encontrar.

Exploremos estos tipos de excepciones con algunos ejemplos. Crearemos un script de Python llamado exceptions_demo.py en el directorio ~/project utilizando el editor VS Code.

  1. Abre VS Code.
  2. Crea un nuevo archivo llamado exceptions_demo.py en el directorio ~/project.
  3. Agrega el siguiente código al archivo exceptions_demo.py:
## TypeError
try:
    result = 1 + "a"
except TypeError as e:
    print(f"TypeError: {e}")

## NameError
try:
    print(undefined_variable)
except NameError as e:
    print(f"NameError: {e}")

## IndexError
try:
    my_list = [1, 2, 3]
    print(my_list[5])
except IndexError as e:
    print(f"IndexError: {e}")

## KeyError
try:
    my_dict = {"a": 1, "b": 2}
    print(my_dict["c"])
except KeyError as e:
    print(f"KeyError: {e}")

## ValueError
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError: {e}")

## FileNotFoundError
try:
    with open("nonexistent_file.txt", "r") as f:
        content = f.read()
except FileNotFoundError as e:
    print(f"FileNotFoundError: {e}")

Este script demuestra cómo se levantan y capturan diferentes tipos de excepciones utilizando bloques try...except. Cada bloque try contiene código que podría levantar una excepción específica. Si se produce la excepción, se ejecuta el bloque except correspondiente.

Ahora, ejecutemos el script:

  1. Abre la terminal en VS Code.
  2. Navega al directorio ~/project:
cd ~/project
  1. Ejecuta el script exceptions_demo.py utilizando el comando python:
python exceptions_demo.py

Deberías ver la siguiente salida:

TypeError: unsupported operand type(s) for +: 'int' and 'str'
NameError: name 'undefined_variable' is not defined
IndexError: list index out of range
KeyError: 'c'
ValueError: invalid literal for int() with base 10: 'abc'
FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent_file.txt'

Esta salida muestra que cada bloque try levantó la excepción esperada, y el bloque except correspondiente capturó e imprimió el mensaje de la excepción.

Comprender los diferentes tipos de excepciones y cómo manejarlas es esencial para escribir código Python robusto y confiable. En el siguiente paso, aprenderás cómo capturar excepciones específicas y manejarlas adecuadamente.

Capturar una Excepción Específica

En el paso anterior, aprendiste sobre diferentes tipos de excepciones en Python. Ahora, aprenderás cómo capturar una excepción específica utilizando el bloque try...except. Esto te permite manejar diferentes errores de diferentes maneras, lo que hace que tu código sea más robusto.

Al capturar excepciones, es una buena práctica ser lo más específico posible. Esto evita que tu bloque except capture accidentalmente excepciones que no está diseñado para manejar, lo que puede ocultar errores y dificultar la depuración.

Modifiquemos el script exceptions_demo.py para capturar una excepción específica, como ValueError, cuando se intenta convertir una cadena en un entero.

  1. Abre el archivo exceptions_demo.py en el directorio ~/project utilizando VS Code.
  2. Modifica el script para capturar solo el ValueError cuando se convierte una cadena en un entero:
try:
    num = int("abc")
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

En este ejemplo, capturamos específicamente el ValueError que se produce cuando int("abc") falla. Si se produce cualquier otra excepción dentro del bloque try, será capturada por el bloque except Exception as e:. La declaración print("Continuing execution...") siempre se ejecutará si se captura cualquier excepción, lo que demuestra que el programa continúa ejecutándose después de manejar la excepción.

Ahora, ejecutemos el script:

  1. Abre la terminal en VS Code.
  2. Navega al directorio ~/project:
cd ~/project
  1. Ejecuta el script exceptions_demo.py utilizando el comando python:
python exceptions_demo.py

Deberías ver la siguiente salida:

ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Esta salida muestra que se capturó el ValueError y que el programa continuó ejecutándose.

Ahora, modifiquemos el script para levantar una excepción diferente, como TypeError, y veamos cómo se maneja:

  1. Abre el archivo exceptions_demo.py en el directorio ~/project utilizando VS Code.
  2. Modifica el script para levantar un TypeError:
try:
    result = 1 + "a"
except ValueError as e:
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

Ahora, ejecuta el script nuevamente:

python exceptions_demo.py

Deberías ver la siguiente salida:

Some other exception: unsupported operand type(s) for +: 'int' and 'str'
Continuing execution...

Esta salida muestra que el TypeError fue capturado por el bloque except Exception as e:, porque no hay un bloque except TypeError específico.

Capturar excepciones específicas te permite manejar diferentes errores de diferentes maneras, lo que hace que tu código sea más robusto y fácil de depurar. En el siguiente paso, aprenderás cómo verificar la instancia de la excepción.

Verificar la Instancia de la Excepción

En este paso, aprenderás cómo verificar la instancia de la excepción para obtener más información sobre el error que se ha producido. Cuando capturas una excepción, puedes acceder al objeto de excepción en sí, que contiene detalles sobre el error.

Modifiquemos el script exceptions_demo.py para imprimir el tipo y los argumentos de la instancia de la excepción.

  1. Abre el archivo exceptions_demo.py en el directorio ~/project utilizando VS Code.
  2. Modifica el script para imprimir el tipo y los argumentos de la excepción ValueError:
try:
    num = int("abc")
except ValueError as e:
    print(f"Exception type: {type(e)}")
    print(f"Exception arguments: {e.args}")
    print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

En este ejemplo, imprimimos el tipo del objeto de excepción utilizando type(e) y los argumentos de la excepción utilizando e.args. El atributo e.args es una tupla que contiene los argumentos que se pasaron al constructor de la excepción.

Ahora, ejecutemos el script:

  1. Abre la terminal en VS Code.
  2. Navega al directorio ~/project:
cd ~/project
  1. Ejecuta el script exceptions_demo.py utilizando el comando python:
python exceptions_demo.py

Deberías ver la siguiente salida:

Exception type: <class 'ValueError'>
Exception arguments: ("invalid literal for int() with base 10: 'abc'",)
ValueError caught: invalid literal for int() with base 10: 'abc'
Continuing execution...

Esta salida muestra el tipo de la excepción (ValueError) y los argumentos pasados al constructor de la excepción (una tupla que contiene el mensaje de error).

Puedes utilizar esta información para proporcionar mensajes de error más detallados o tomar acciones específicas en función del tipo y los argumentos de la excepción.

Por ejemplo, puedes comprobar si los argumentos de la excepción contienen un mensaje de error específico:

try:
    num = int("abc")
except ValueError as e:
    if "invalid literal" in e.args[0]:
        print("Invalid input: Please enter a valid number.")
    else:
        print(f"ValueError caught: {e}")
except Exception as e:
    print(f"Some other exception: {e}")

print("Continuing execution...")

En este ejemplo, comprobamos si el primer argumento de la excepción ValueError contiene la cadena "invalid literal". Si es así, imprimimos un mensaje de error más específico.

Verificar la instancia de la excepción te permite manejar los errores de manera más inteligente y proporcionar mensajes de error más informativos al usuario.

Resumen

En este laboratorio, el primer paso se centra en comprender los diferentes tipos de excepciones en Python, que son cruciales para un manejo efectivo de errores. El laboratorio presenta excepciones integradas comunes como TypeError, NameError, IndexError, KeyError, ValueError y FileNotFoundError.

Luego, el laboratorio proporciona ejemplos prácticos de cómo se generan y capturan estas excepciones utilizando bloques try...except. Se crea un script de Python llamado exceptions_demo.py para demostrar cada tipo de excepción, mostrando cómo anticipar y manejar posibles errores que pueden interrumpir el flujo normal de ejecución de un programa.