Códigos de Error de Python
Los códigos de error de Python son excepciones que se generan cuando se producen operaciones incorrectas o no permitidas durante la ejecución de un programa. Comprender estos errores es fundamental para desarrollar sistemas robustos y confiables, ya que permite identificar rápidamente la fuente de fallos, corregirlos y aplicar soluciones efectivas. Los errores pueden aparecer durante la fase de desarrollo debido a problemas de sintaxis, uso de tipos de datos incorrectos, acceso a recursos inexistentes o lógica de programa defectuosa. Los conceptos clave incluyen sintaxis, tipos de excepciones, técnicas de depuración y manejo de errores. Este manual proporciona un listado completo de los errores más comunes de Python, describe las condiciones que los generan, muestra ejemplos prácticos y enseña las mejores prácticas para gestionarlos. El lector aprenderá a identificar, capturar y corregir errores, aplicando estrategias avanzadas de depuración que aumentan la estabilidad y la mantenibilidad de aplicaciones backend.
Consideremos un ejemplo práctico: un sistema que procesa entradas del usuario, lee archivos y se conecta a bases de datos. En estos casos pueden surgir errores como FileNotFoundError
, ValueError
o ZeroDivisionError
. Para asegurar la fiabilidad, las operaciones críticas se colocan dentro de bloques try
, y cada excepción se maneja con bloques except
específicos. Esto permite responder adecuadamente a cada error, registrar eventos y aplicar soluciones alternativas. El bloque finally
asegura la liberación de recursos, como archivos abiertos o conexiones a la base de datos, incluso si ocurre un error. Este enfoque evita fallos inesperados, mejora la mantenibilidad del código y garantiza un funcionamiento estable de sistemas backend en producción.
Example
pythondef procesar_datos():
try:
# NameError: uso de una variable no definida
print(variable_no_definida)
# ZeroDivisionError: división por cero
resultado = 10 / 0
# ValueError: conversión inválida
numero = int("abc")
# FileNotFoundError: archivo no encontrado
with open("archivo_inexistente.txt", "r") as f:
contenido = f.read()
# AttributeError: llamada a método inexistente
[].appendx(1)
except NameError as ne:
print(f"Capturado NameError: {ne}")
except ZeroDivisionError as zde:
print(f"Capturado ZeroDivisionError: {zde}")
except ValueError as ve:
print(f"Capturado ValueError: {ve}")
except FileNotFoundError as fe:
print(f"Capturado FileNotFoundError: {fe}")
except AttributeError as ae:
print(f"Capturado AttributeError: {ae}")
except Exception as e:
print(f"Capturado otra excepción: {e}")
finally:
print("Limpieza de recursos completada.")
procesar_datos()
📊 Comprehensive Reference
Error | Descripción | Cuándo ocurre | Ejemplo | Notas |
---|---|---|---|---|
SyntaxError | Error de sintaxis | Código incorrecto | eval('x === 2') |
Ocurre en tiempo de compilación |
IndentationError | Error de indentación | Indentación incorrecta | if True:\nprint("Hola") |
Subtipo de SyntaxError |
TabError | Mezcla de tabulación y espacios | Uso de tabs y espacios juntos | <tab> <space> print("Hola") |
Requiere consistencia en la indentación |
NameError | Variable no definida | Uso de variable inexistente | print(x) |
Común durante depuración |
TypeError | Tipo incorrecto | Operación con tipo incompatible | 5 + "5" |
Python es dinámicamente tipado |
ValueError | Valor inválido | Conversión o valor incorrecto | int("abc") |
Validar datos de entrada |
IndexError | Índice fuera de rango | Acceso a índice inexistente | lst = []; lst[1] |
Verificar longitud de lista |
KeyError | Clave inexistente | Acceso a clave no presente | d = {}; d['x'] |
Usar dict.get() para seguridad |
AttributeError | Atributo inexistente | Llamada a método no existente | [].appendx(1) |
Verificar nombre de método |
ZeroDivisionError | División por cero | Divisor es cero | 10 / 0 |
Verificar divisor |
ImportError | Módulo no encontrado | Módulo ausente | import modulo_inexistente |
Comprobar instalación |
ModuleNotFoundError | Módulo no encontrado | Módulo ausente | import no_existe |
Python 3.6+ |
FileNotFoundError | Archivo no encontrado | Archivo ausente | open("no_existe.txt") |
Verificar ruta |
IsADirectoryError | Se esperaba archivo, es directorio | Abrir directorio | open("carpeta") |
Depende del OS |
NotADirectoryError | Se esperaba directorio, es archivo | os.listdir("archivo.txt") |
Depende del OS | |
PermissionError | Permisos insuficientes | Acceso denegado | open("/root/file") |
Verificar permisos |
OSError | Error de sistema | Problema de OS | os.remove("/root/file") |
Clase base de otros errores |
OverflowError | Desbordamiento | Valor demasiado grande | 2.0**10000 |
Raro en Python 3 |
RecursionError | Recursión demasiado profunda | Muchas llamadas recursivas | def f(): f(); f() |
sys.setrecursionlimit() |
MemoryError | Memoria insuficiente | Datos muy grandes | a = 'a'*10**10 |
Depende del sistema |
StopIteration | Iterador agotado | Iterador vacío | next(iter([])) |
Iteradores personalizados |
AssertionError | Falló assert | assert False |
Validar condiciones | |
FloatingPointError | Error punto flotante | Operación FP inválida | numpy.seterr(all='raise') |
NumPy |
UnicodeError | Error de codificación/decodificación | "ü".encode("ascii") |
Validar encoding | |
UnicodeDecodeError | Error de decodificación | b'\xff'.decode('utf-8') |
Lectura de archivo | |
UnicodeEncodeError | Error de codificación | "ü".encode("ascii") |
Encoding incorrecto | |
RecursionWarning | Aviso de recursión | Recursión profunda | import warnings |
No crítico |
DeprecationWarning | Función obsoleta | Uso de función antigua | warnings.warn("deprecated") |
Migrar función |
RuntimeWarning | Aviso de ejecución | Problema potencial | import warnings |
No crítico |
FutureWarning | Aviso futuro | Cambios futuros | warnings.warn("future") |
Compatibilidad futura |
UserWarning | Aviso de usuario | Aviso personalizado | warnings.warn("user") |
No crítico |
PendingDeprecationWarning | Próximo a obsoleto | Función será removida | warnings.warn("pending") |
Raro |
ResourceWarning | Recurso no liberado | Archivo no cerrado | open("file") |
Python 3+ |
ArithmeticError | Error aritmético | Operación inválida | int("x")/0 |
Clase base |
BufferError | Error de buffer | Operación inválida en buffer | memoryview(b'').release() |
Raro |
ConnectionError | Error de conexión | Problemas de red | requests.get("bad_url") |
Depende de red |
BrokenPipeError | Pipe roto | Escribir en pipe cerrado | os.write(fd, b'data') |
Unix |
ChildProcessError | Error de proceso hijo | Problema en proceso hijo | os.waitpid(-1) |
Raro |
EOFError | Fin inesperado de archivo | Fin de input | input() EOF |
Input vacío |
EnvironmentError | Error de entorno | Problema de OS/entorno | os.remove("/root/file") |
Clase base OSError |
GeneratorExit | Salida de generador | gen.close() |
Generadores | |
IOError | Error de I/O | Fallo lectura/escritura | open("/root/file") |
Python 3 -> OSError |
InterruptedError | Interrumpido | Llamada del sistema interrumpida | os.read(fd, 0) |
Unix |
LookupError | Error de búsqueda | Búsqueda inválida | d['x'] |
Clase base Lookup |
ReferenceError | Referencia inválida | Weakref expirado | import weakref |
Raro |
RuntimeError | Error en ejecución | raise RuntimeError() |
Error general | |
StopAsyncIteration | Fin async iterador | async for |
Python 3.5+ | |
SyntaxWarning | Aviso de sintaxis | Sintaxis sospechosa | warnings.warn("syntax") |
No detiene programa |
SystemError | Error de sistema | Error interno Python | sys._getframe(0) |
Raro |
SystemExit | Salida de sistema | sys.exit() |
Termina programa | |
TimeoutError | Tiempo agotado | Timeout operación | socket.settimeout() |
Red |
UnboundLocalError | Variable local no asignada | Uso antes de asignar | x=1; def f(): print(x); x=2 |
Subtipo NameError |
ZeroDivisionError | División por cero | Divisor cero | 10 / 0 |
Verificar divisor |
🧠 Pon a Prueba tu Conocimiento
Test Your Knowledge
Prueba tu comprensión de los códigos de error de Python
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior