try-except

 

¿Qué es try-except?

Es una estructura que maneja errores (excepciones) en Python:

  • try: Código que podría fallar

  • except: Qué hacer si ocurre un error específico

  • finally: Código que SIEMPRE se ejecuta (ocurra o no error)

Respondiendo tu pregunta: ¿Debo saber el nombre exacto del error?

SÍ, debes conocer el tipo de error específico que quieres capturar. No puedes poner nombres al azar.

Tipos comunes de errores que puedes usar:

python
# Ejemplos de errores válidos:
except FileNotFoundError:    # Archivo no existe
except ValueError:           # Valor incorrecto
except TypeError:            # Tipo de dato incorrecto  
except ZeroDivisionError:    # División por cero
except IndexError:           # Índice fuera de rango
except KeyError:             # Clave no existe en diccionario

Alternativas si no sabes el error exacto:

python
# 1. Capturar múltiples errores:
except (FileNotFoundError, PermissionError):
    print("Error con el archivo")

# 2. Capturar cualquier error:
except Exception as e:
    print(f"Ocurrió un error: {e}")

# 3. Capturar error general:
except:
    print("Algo salió mal")

En tu código específico:

python
except FileNotFoundError:  # ✅ CORRECTO - Este error existe
    print("Error: No se pudo encontrar el archivo.")

except ErrorQueNoExiste:   # ❌ INCORRECTO - Python dará error
    print("Esto fallará")

Consejo: Si no estás seguro, usa except Exception as e: para ver qué error específico está ocurriendo.


El except sin nombre específico

Cuando usas except: sin especificar un tipo de error, captura TODOS los errores que ocurran en el bloque try.

En tu ejemplo:

python
try:
    numero = int(input("Introduce un número"))  # Esto puede dar ValueError
    numero2 = int(input("Introduce otro número"))
    resultado = numero * numero2
    print(resultado)

except:  # ⬅️ Esto captura CUALQUIER error
    print("Debes introducir números, no funciona si pones otra cosa")

¿Qué errores captura este except?

  • ValueError: Si el usuario escribe "hola" en lugar de un número

  • KeyboardInterrupt: Si el usuario presiona Ctrl+C

  • MemoryError: Si no hay memoria suficiente

  • Cualquier otro error que ocurra

El problema con este enfoque:

python
try:
    archivo = open("datos.txt", "r")
    numero = int(input("Número: "))  # Si aquí da ValueError...
    archivo.close()  # ⚠️ Esto NUNCA se ejecuta si hay error

except:  # Captura todos los errores por igual
    print("Algo salió mal")  # ⚠️ No sabes qué realmente falló

Mejor práctica: Ser específico

python
try:
    numero = int(input("Introduce un número"))
    numero2 = int(input("Introduce otro número"))
    resultado = numero * numero2
    print(resultado)

except ValueError:  # ⬅️ Solo captura el error esperado
    print("Debes introducir números válidos")
except Exception as e:  # ⬅️ Para otros errores inesperados
    print(f"Error inesperado: {e}")

Conclusión: El código de la imagen funciona, pero no es la mejor práctica porque oculta errores inesperados que podrías necesitar conocer.

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

4 tipos de colecciones de datos más

Funciones en Python: con y sin paréntesis