Errores y Excepciones en Python

PythonBeginner
Practicar Ahora

Introducción

En este laboratorio, obtendrá una comprensión práctica de los errores y las excepciones en Python. Exploraremos cómo identificar errores de sintaxis comunes que impiden la ejecución del código, reconocer varios tipos de excepciones que ocurren durante el tiempo de ejecución (runtime) y diferenciar claramente entre estos dos conceptos fundamentales en la programación Python.

A través de ejercicios prácticos, aprenderá a detectar y corregir problemas como la indentación incorrecta, elementos de sintaxis faltantes y otras trampas comunes, construyendo una base sólida para escribir código Python robusto y sin errores.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Identificar Errores de Sintaxis

En este paso, exploraremos los errores de sintaxis comunes en Python. Los errores de sintaxis ocurren cuando el código viola las reglas gramaticales del lenguaje, impidiendo que el intérprete comprenda y ejecute el código. Estos errores se detectan incluso antes de que el programa comience a ejecutarse.

El archivo necesario syntax_errors.py ha sido creado para usted en el directorio ~/project.

Primero, introduzcamos un IndentationError. Abra syntax_errors.py desde el explorador de archivos en el lado izquierdo del WebIDE. Agregue el siguiente código, que contiene una indentación incorrecta:

for i in range(5):
    print(i)
  print("This line has incorrect indentation")

Guarde el archivo. Ahora, abra la terminal integrada y ejecute el script:

python syntax_errors.py

Verá un IndentationError. El intérprete de Python espera que los bloques de código (como el que está dentro de un bucle for) tengan un nivel de indentación consistente.

  File "/home/labex/project/syntax_errors.py", line 3
    print("This line has incorrect indentation")
                                                ^
IndentationError: unindent does not match any outer indentation level

Ahora, arreglemos la indentación pero introduzcamos un SyntaxError diferente. Modifique el código en syntax_errors.py a lo siguiente. Observe la falta de dos puntos (:) al final de la primera línea.

for i in range(5)
    print(i)
    print("This line has correct indentation")

Guarde el archivo y ejecútelo de nuevo desde la terminal:

python syntax_errors.py

Esta vez, obtendrá un SyntaxError. La declaración del bucle for en Python requiere dos puntos al final para indicar el comienzo de un bloque de código.

  File "/home/labex/project/syntax_errors.py", line 1
    for i in range(5)
                     ^
SyntaxError: expected ':'

Finalmente, corrijamos los dos puntos pero introduzcamos otro SyntaxError común: una cadena de texto no terminada (unterminated string). Modifique el archivo syntax_errors.py de la siguiente manera. La cadena "hello' comienza con comillas dobles pero termina con comillas simples.

for i in range(5):
    print("hello')

Guarde el archivo y ejecútelo:

python syntax_errors.py

Encontrará un SyntaxError porque la cadena no se cerró correctamente con una comilla coincidente.

  File "/home/labex/project/syntax_errors.py", line 2
    print("hello')
          ^
SyntaxError: unterminated string literal (detected at line 2)

Estos ejemplos ilustran que los errores de sintaxis deben corregirse antes de que su programa pueda ejecutarse. Siempre preste mucha atención a la indentación, los símbolos requeridos como los dos puntos y las comillas coincidentes.

Reconocer Excepciones Comunes

En este paso, exploraremos las excepciones comunes. A diferencia de los errores de sintaxis, las excepciones ocurren durante la ejecución del programa. El código es sintácticamente correcto, pero surge un error mientras se está ejecutando.

El archivo common_exceptions.py está listo para usted en el directorio ~/project.

Primero, vamos a provocar un ZeroDivisionError. Abra common_exceptions.py en el editor y agregue el siguiente código:

numerator = 10
denominator = 0
result = numerator / denominator
print(result)

Guarde el archivo y ejecútelo desde la terminal:

python common_exceptions.py

El programa comienza a ejecutarse, pero se detiene y muestra un ZeroDivisionError. Matemáticamente, la división por cero no está definida, y Python lanza esta excepción para indicar el problema.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 3, in <module>
    result = numerator / denominator
ZeroDivisionError: division by zero

A continuación, vamos a activar un NameError. Esto sucede cuando intenta usar una variable que aún no ha sido definida. Reemplace el contenido de common_exceptions.py con lo siguiente:

print(undefined_variable)

Guarde el archivo y ejecútelo:

python common_exceptions.py

Obtendrá un NameError porque el intérprete no sabe a qué se refiere undefined_variable.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 1, in <module>
    print(undefined_variable)
NameError: name 'undefined_variable' is not defined

Ahora, veamos un TypeError. Esto ocurre cuando intenta realizar una operación en un objeto de un tipo inapropiado. Reemplace el contenido de common_exceptions.py con este código:

print("Hello" + 5)

Guarde y ejecute el script:

python common_exceptions.py

Verá un TypeError. Python no le permite sumar (+) una cadena (string) y un entero (integer) directamente.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 1, in <module>
    print("Hello" + 5)
TypeError: can only concatenate str (not "int") to str

Finalmente, demostraremos un IndexError. Esto sucede cuando intenta acceder a un elemento de una secuencia (como una lista) usando un índice que está fuera de rango. Reemplace el contenido de common_exceptions.py con lo siguiente:

my_list = [1, 2, 3]
print(my_list[5])

Guarde y ejecute el script:

python common_exceptions.py

Obtendrá un IndexError. La lista my_list tiene tres elementos, por lo que sus índices válidos son 0, 1 y 2. Acceder al índice 5 no es posible.

Traceback (most recent call last):
  File "/home/labex/project/common_exceptions.py", line 2, in <module>
    print(my_list[5])
IndexError: list index out of range

Comprender estas excepciones comunes es una parte clave para aprender a depurar código Python.

Diferenciar Entre Errores y Excepciones

En este paso final, distinguiremos claramente entre errores de sintaxis y excepciones. Esta distinción es fundamental para la programación y depuración en Python.

Errores de Sintaxis (o Errores de Parseo):

  • Son fallos en la estructura de su código que violan las reglas de Python.
  • El intérprete de Python encuentra estos errores antes de que su programa comience a ejecutarse.
  • Un programa con un error de sintaxis no puede ejecutarse en absoluto.
  • Ejemplos: IndentationError, dos puntos faltantes, paréntesis o comillas desparejadas.

Excepciones (o Errores en Tiempo de Ejecución - Runtime Errors):

  • Estos errores ocurren durante la ejecución de un programa sintácticamente correcto.
  • Suceden cuando el programa encuentra una situación inesperada, como dividir por cero o acceder a un archivo inexistente.
  • Si no se manejan, una excepción provocará que su programa falle y muestre un traceback.
  • Ejemplos: ZeroDivisionError, NameError, TypeError, IndexError.

Veamos esto en acción. Abra el archivo error_vs_exception.py desde el explorador de archivos. Agregue el siguiente código, que contiene tanto un error de sintaxis (un dos puntos faltante) como una línea que provocará una excepción en tiempo de ejecución.

## This line has a syntax error (missing colon)
for i in range(5)
    print(i)

## This line will cause an exception (division by zero)
result = 10 / 0
print(result)

Guarde el archivo e intente ejecutarlo:

python error_vs_exception.py

Observe que inmediatamente obtiene un SyntaxError. El intérprete revisa todo el archivo en busca de sintaxis correcta antes de ejecutar cualquier parte. Encuentra el dos puntos faltante y se detiene, sin siquiera llegar a la línea con 10 / 0.

  File "/home/labex/project/error_vs_exception.py", line 2
    for i in range(5)
                     ^
SyntaxError: expected ':'

Ahora, vamos a corregir el error de sintaxis. Agregue los dos puntos faltantes a la línea del bucle for en error_vs_exception.py:

## The syntax error is now fixed
for i in range(5):
    print(i)

## This line will cause an exception (division by zero)
result = 10 / 0
print(result)

Guarde el archivo y ejecútelo de nuevo:

python error_vs_exception.py

Esta vez, el programa es sintácticamente correcto, por lo que comienza a ejecutarse. El bucle for se ejecuta e imprime los números del 0 al 4. Luego, cuando el programa intenta ejecutar result = 10 / 0, encuentra un problema en tiempo de ejecución y lanza un ZeroDivisionError, lo que provoca que el programa falle.

0
1
2
3
4
Traceback (most recent call last):
  File "/home/labex/project/error_vs_exception.py", line 6, in <module>
    result = 10 / 0
ZeroDivisionError: division by zero

Esto demuestra claramente que los errores de sintaxis impiden la ejecución, mientras que las excepciones ocurren durante la ejecución. En laboratorios futuros, aprenderá cómo manejar las excepciones de manera elegante para que no provoquen el fallo de su programa.

Resumen

En este laboratorio, ha aprendido la diferencia fundamental entre errores y excepciones en Python. Comenzó identificando y corrigiendo errores de sintaxis comunes, como IndentationError y SyntaxError por un dos puntos faltante, comprendiendo que estos impiden que un programa se ejecute.

A continuación, exploró varias excepciones comunes en tiempo de ejecución (runtime), incluyendo ZeroDivisionError, NameError, TypeError e IndexError. Vio cómo ocurren estas excepciones en código sintácticamente correcto cuando una operación falla durante la ejecución. Finalmente, solidificó su comprensión observando cómo el intérprete de Python maneja un archivo que contiene tanto un error de sintaxis como una posible excepción, demostrando que la sintaxis se verifica antes de que comience la ejecución. Este conocimiento proporciona una base crucial para escribir y depurar aplicaciones Python.