Indicación metodológica de lectura fundamental para el estudiante
Antes de presionar una sola tecla o abrir su Bloc de Notas, lea este capítulo por completo. Si en las clases anteriores aprendimos a crear programas que funcionan bajo condiciones ideales, hoy aprenderemos a enfrentar la realidad: el usuario comete errores, el sistema falla y los datos pueden estar corruptos. Un programa profesional no es aquel que nunca falla, sino aquel que sabe qué hacer cuando el error ocurre. La frustración será parte de esta clase; si el código se rompe, usted debe tener la madurez para identificar la línea exacta del fallo. Mantenga su configuración de lector de pantalla al máximo nivel de detalle.
Introducción
Hasta ahora, si un programa pedía un número y el usuario escribía una letra, el sistema colapsaba con un error técnico incomprensible. Eso termina hoy. Aprenderemos la estructura `try` y `except`, que permite "intentar" ejecutar un código y, si algo sale mal, capturar el error y mostrar un mensaje amable en lugar de permitir que el programa explote. Este capítulo elevará su nivel de programación de "aficionado" a "desarrollador defensivo".
Objetivos del Capítulo
Primero: Implementar la estructura `try` / `except` para gestionar errores en tiempo de ejecución.
Segundo: Identificar tipos de errores comunes como `ValueError` (error de valor) y `ZeroDivisionError` (división por cero).
Tercero: Ampliar el vocabulario con términos de control de excepciones.
Cuarto: Superar el Desafío Mental: "El Filtro de la Verdad".
Quinto: Reforzar la disciplina de orden en la carpeta Bloque Dos antes del segundo examen.
Explicaciones Detalladas
La estructura Try / Except: La defensa contra el caos
La lógica de esta estructura es: "Intenta hacer esto. Si ocurre un error, no detengas el programa, salta directamente a la parte de 'except' y gestiona el problema".
La sintaxis es:
try:
(tabulador) codigo_que_podria_fallar
except:
(tabulador) accion_ante_el_error
Vocabulario técnico obligatorio
Investigue y defina en su cuaderno de respuestas (`Tarea_Nueve.txt`):
1. Excepción: Evento que altera el flujo normal de un programa.
2. Depuración (Debugging): Proceso metódico para encontrar fallos.
3. ValueError: Error cuando una función recibe un valor del tipo correcto pero con valor inapropiado.
4. ZeroDivisionError: Error al intentar dividir cualquier número por cero.
5. Control de flujo: Capacidad de dirigir qué líneas se ejecutan y cuáles no.
6. Gestión de errores: Práctica de anticipar fallos posibles.
7. Código robusto: Programa capaz de manejar situaciones inesperadas.
8. Bloque: Conjunto de líneas de código agrupadas por sangría.
9. Traza de error (Traceback): El mensaje que Python da cuando el programa colapsa.
10. Validar: Comprobar que los datos cumplen los requisitos esperados.
Desafío Mental: El Filtro de la Verdad
Metodología: Este desafío se basa en la "Paradoja de Aquiles y la Tortuga". El objetivo no es resolver la paradoja, sino implementar un sistema que evite que el usuario introduzca datos que lleven al error.
Contexto: Usted está creando un programa de administración de recursos. El usuario debe ingresar la cantidad de suministros y la cantidad de personas. Si intenta dividir por cero (0 personas) o ingresar letras en vez de números, el programa debe "filtrar" la verdad y mostrar un mensaje de advertencia.
Instrucciones:
1. Diseñe el algoritmo en `Laberinto_Mental.txt`.
2. El desafío real: debe hacer que el programa pida los datos de nuevo si el usuario se equivoca, usando un ciclo `while` junto con un `try-except`.
3. Esto es complejo porque debe controlar que el programa no se cierre hasta que los datos sean correctos.
4. Puntuación: Si logra que el usuario no pueda salir del programa hasta que ingrese un número válido, obtendrá la máxima puntuación por pensamiento de sistemas.
Ejemplo Práctico Guiado: El Divisor Inteligente
Paso Uno: Digite este código:
try:
numero = int(input("Ingrese un número para dividir 100: "))
resultado = 100 / numero
print("El resultado es:", resultado)
except ValueError:
print("Error: Debe ingresar un número entero.")
except ZeroDivisionError:
print("Error: No se puede dividir entre cero.")
Paso Dos: Análisis.
Si el usuario ingresa una letra, se dispara `ValueError`. Si ingresa 0, se dispara `ZeroDivisionError`. El programa sobrevive en ambos casos.
Paso Tres: Guárdelo como divisor.py y ejecútelo. Pruebe todas las entradas posibles.
Ejercicios de Refuerzo de Lógica
Cree el archivo `Algoritmos_Capitulo_9.txt` y desarrolle:
Ejercicio 1: Diseñe el algoritmo de un Login que use `try-except` para asegurar que la edad ingresada sea siempre un número.
Ejercicio 2: Algoritmo que convierta una lista de texto a números, capturando errores si algún elemento no es convertible.
Ejercicios Prácticos de Programación en Python
Ejercicio 1: Calculadora a prueba de fallos.
Haga una calculadora que sume dos números, pero proteja la entrada de datos para que si el usuario escribe texto, el programa no se detenga.
Ejercicio 2: El bucle persistente.
Cree un programa que pida un número positivo. Mientras el usuario ingrese números negativos o letras, el programa debe pedir el número de nuevo. Use `while`, `try` y `except`.
Ejercicio 3: Conversor de divisas universal.
Pida una cantidad en moneda local y conviértala a una divisa extranjera. Si la entrada no es numérica, informe del error y pida el dato de nuevo.
Prácticas con tu Lector de Pantalla y CMD
Abra `Tarea_Nueve.txt` en su carpeta Capitulo 9 y responda:
1. ¿Cómo le comunica su lector de pantalla la aparición de un `Traceback` al fallar el programa?
2. ¿Qué diferencia siente al escuchar el mensaje de error personalizado que usted escribió, frente al mensaje técnico que da Python?
3. En la consola CMD, ¿cómo nota usted que el programa `divisor.py` terminó correctamente después de un error capturado?
4. ¿Por qué es necesario indentar el bloque dentro del `try` y el `except`?
5. ¿Qué sucede si escribe `except` sin especificar el tipo de error?
6. ¿Cómo deletrea su lector de pantalla la palabra "except" para asegurarse de que no falte la 't' final?
7. ¿Qué comando de CMD usaría para ver los archivos de este capítulo y confirmar el nombre de `divisor.py`?
8. ¿Cómo verifica con su lector de pantalla que la sangría del `except` es la misma que la del `try`?
9. ¿Qué ventaja técnica tiene capturar errores específicos en lugar de un `except` genérico?
10. ¿Por qué el uso de `try-except` es obligatorio para ser considerado un programador profesional?
Información Institucional sobre la Evaluación
Usted ha llegado al final del Bloque Dos. Esta clase ha sido la más difícil hasta ahora porque requiere prever lo invisible: el error humano. Recuerde: el orden en su equipo es la base de su éxito. La próxima semana nos enfrentamos al **Segundo Examen de Evaluación**. Prepárese, repase sus carpetas, sus apuntes y la lógica de los bucles y errores. Nos vemos el domingo.
Profesor: Diego R. Solano C.