1.1 Aparición de un error
Los errores (y excepciones) son parte integral de la programación. Surgen cuando el programa se enfrenta a situaciones imprevistas que no puede manejar. En Python, existe un sistema de manejo de excepciones que permite interceptar y manejar errores, evitando que el programa termine abruptamente.
Las excepciones surgen con más frecuencia en las siguientes situaciones:
Errores de sintaxis:
Estos errores se detectan en la etapa de compilación del código y están relacionados con la gramática incorrecta del lenguaje Python. Por ejemplo, dos puntos faltantes o palabras clave incorrectas.
if True:
print("Hello")
Errores en tiempo de ejecución (Runtime Errors)
:
Estos errores ocurren durante la ejecución del programa y pueden ser causados por diversas razones, como división por cero, acceso a un índice de lista inexistente, uso incorrecto de tipos de datos, etc.
print(1 / 0) # ZeroDivisionError
Errores lógicos:
Estos errores ocurren cuando el programa se ejecuta sin fallos, pero produce un resultado incorrecto debido a un error en la lógica del programa. Los errores lógicos no lanzan excepciones y son más difíciles de depurar.
Los errores lógicos suelen llamarse bugs — es como una cierta imperfección en la funcionalidad del programa. Los errores en tiempo de ejecución se llaman excepciones. Para cada error de este tipo, Python crea un objeto especial (excepción) y lo "lanza" al programa...
1.2 Ruta de las excepciones
Cuando en Python surge una excepción, se eleva a través de la pila de llamadas hasta que se maneja. La pila de llamadas representa la secuencia de llamadas de funciones que llevaron a la aparición de la excepción.
Mecanismo de elevación de excepciones
- Ocurrencia de una excepción: Cuando sucede un error, Python crea un objeto de excepción.
- Búsqueda de manejador de excepción: El intérprete de Python comienza la búsqueda de un manejador de excepción en el bloque de código actual. Si no encuentra uno, pasa al siguiente bloque de código que llamó a la función actual.
- Elevación de la excepción a través de la pila: Este proceso se repite hasta que se encuentra un manejador o se agota la pila de llamadas.
- Terminación del programa: Si no se encuentra un manejador, el programa termina su ejecución y muestra un mensaje de error.
Ejemplo:
def func_a():
func_b()
def func_b():
func_c()
def func_c():
print(1 / 0) # Aquí ocurre la excepción ZeroDivisionError
func_a()
En este ejemplo, la excepción ZeroDivisionError
surge en la función
func_c
, luego se eleva a través de la pila de llamadas a través de func_b
y func_a
.
Si no se encuentra un manejador en ninguna parte, el programa terminará con un
error.
1.3 Lectura del log
Cuando el programa termina debido a una excepción no manejada, Python muestra un trazado de pila (traceback), que ayuda a los desarrolladores a entender qué salió mal. El trazado de pila contiene información sobre la secuencia de llamadas de funciones que llevaron a la aparición de la excepción, y puede ser analizado para depurar el programa.
Ejemplo de trazado de pila
Traceback (most recent call last):
File "example.py", line 10, in
func_a()
File "example.py", line 2, in func_a
func_b()
File "example.py", line 5, in func_b
func_c()
File "example.py", line 8, in func_c
print(1 / 0)
ZeroDivisionError: division by zero
Análisis del trazado de pila
- Tipo de excepción y mensaje: Al final del trazado se indica el tipo de excepción y el mensaje. En
el ejemplo proporcionado es
ZeroDivisionError: division by zero
. - Secuencia de llamadas: El trazado de pila muestra la secuencia de llamadas de
funciones. En nuestro ejemplo, el error ocurrió en la línea
print(1 / 0)
en la funciónfunc_c
, que fue llamada desdefunc_b
, que a su vez fue llamada desdefunc_a
. - Archivos y líneas de código: En cada línea del trazado se indica el archivo y el número de línea donde se produjo la llamada. Esto ayuda a encontrar y corregir rápidamente el error en el código.
Uso práctico del trazado de pila
El trazado de pila es una herramienta importante para la depuración y análisis de programas. Ayuda a los desarrolladores a entender la causa del error y a encontrar el lugar en el código donde ocurrió. Aquí hay algunos consejos sobre cómo usar el trazado de pila:
- Leer de abajo hacia arriba: Comienza el análisis desde la llamada más baja en el trazado, ya que es donde ocurrió la excepción.
- Revisar todas las llamadas: Examina todas las llamadas en el trazado para entender la ruta por la que se propagó la excepción.
- Corregir el código: Usa la información del trazado para corregir el código y prevenir errores similares en el futuro.
Aprenderás más sobre excepciones en las próximas lecciones.
GO TO FULL VERSION