10 Errores Comunes en Python y Cómo Evitarlos

Aprender Python es emocionante, pero también es fácil caer en ciertas trampas comunes. Los errores pueden ser frustrantes, pero son parte del proceso de aprendizaje. Conocer los errores más comunes te ayudará a evitarlos y a escribir código más limpio y eficiente.

1Confundir un valor con una entidad

Evita asumir que dos variables con el mismo valor son la misma entidad (objeto).

python
a = [1, 2]
b = [1, 2]
print(a == b)  # True (tienen el mismo valor)
print(a is b)  # False (son objetos distintos)

✅ Usa la comaparación de identidad == para comparar valores y is para comparar identidades, siempre y cuando sean necesarios.

2Modificar una lista mientras se itera

Hacer cambios en una lista durante una iteración puede producir resultados inesperados.

python
items = [1, 2, 3, 4]
for i in items:
  if i % 2 == 0:
      items.remove(i)  # ⚠️ Error
print(items)  # Resultado inesperado

✅ Solución:

python
items = [1, 2, 3, 4] # Lista original
items = [i for i in items if i % 2 != 0] # Filtrando elementos impares

3Intentar modificar cadenas directamente

Las cadenas (str) son inmutables, lo que significa que no puedes cambiar sus caracteres directamente.

python
s = "hola"  # Cadena original
s[0] = "H"  # ❌ TypeError

✅ Solución:

python
s = "hola"  # Cadena original
s = "H" + s[1:] # Cambiando el primer carácter

4Manejo inadecuado de archivos

No cerrar los archivos puede generar pérdida de recursos.

python
file = open("archivo.txt", "r")  # Abriendo el archivo
data = file.read() # Leyendo el contenido
# ⚠️ Falta file.close() # Cerrando el archivo

✅ Solución con with, que cierra automáticamente el archivo:

python
with open("archivo.txt", "r") as file:
  data = file.read() # Leyendo el contenido

5Comprobación de tipos incorrectos

Evita usar type() directamente para verificaciones, y usa isinstance() en su lugar.

python
if type(x) == int:  # ❌

✅ Usa isinstance():

python
if isinstance(x, int):  # ✅

6Referencias en lugar de copias

Copiar listas u objetos por referencia puede generar efectos secundarios inesperados.

python
a = [1, 2, 3] # Lista original
b = a          # Referencia
b.append(4) # Modificando b
print(a)  # ⚠️ También cambia

✅ Solución:

python
import copy
b = a.copy()       # Para listas simples
# b = copy.deepcopy(a)  # Para estructuras anidadas

7Manejo deficiente de excepciones

Capturar todas las excepciones sin control puede ocultar errores reales, lo que puede conducir a comportamientos inesperados.

python
try:
  resultado = 10 / 0
except:
  print("Algo salió mal")  # ⚠️ Muy genérico

✅ Específica el tipo de excepción:

python
try:
  resultado = 10 / 0
except ZeroDivisionError:
  print("No se puede dividir entre cero")

8Nombres de variables poco claros

Evita nombres como x, data1, tmp sin contexto, ya que dificultan la comprensión del código.

python
d = 20  # ¿Qué significa 'd'?

✅ Usa nombres descriptivos:

python
dias_habiles = 20

9No gestionar correctamente el alcance de las variables

Variables globales mal utilizadas pueden causar errores difíciles de depurar.

python
x = 5
def cambiar():
  x = 10  # Esto no afecta al global x
cambiar()
print(x)  # 5

✅ Usa global solo si es necesario (y con cuidado):

python
x = 5
def cambiar():
  global x
  x = 10

10No entender la mutabilidad de los objetos

Cambiar objetos mutables dentro de funciones puede afectar variables externas.

python
def agregar(lista):
  lista.append(100)

valores = [1, 2, 3]
agregar(valores)
print(valores)  # ⚠️ Se modificó fuera de la función

✅ Documenta el comportamiento o usa copias si no deseas efectos secundarios.

python
def agregar(lista):
  nueva = lista.copy()
  nueva.append(100)
  return nueva