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.
Evita asumir que dos variables con el mismo valor son la misma entidad (objeto).
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.
Hacer cambios en una lista durante una iteración puede producir resultados inesperados.
items = [1, 2, 3, 4]
for i in items:
if i % 2 == 0:
items.remove(i) # ⚠️ Error
print(items) # Resultado inesperado Solución:
items = [1, 2, 3, 4] # Lista original
items = [i for i in items if i % 2 != 0] # Filtrando elementos impares Las cadenas (str) son inmutables, lo que significa que no puedes cambiar sus caracteres directamente.
s = "hola" # Cadena original
s[0] = "H" # Error TypeError Solución:
s = "hola" # Cadena original
s = "H" + s[1:] # Cambiando el primer carácter No cerrar los archivos puede generar pérdida de recursos.
file = open("archivo.txt", "r") # Abriendo el archivo
data = file.read() # Leyendo el contenido
# ⚠️ Falta file.close() # Cerrando el archivo Solución: Utiliza with, que cierra automáticamente el archivo:
with open("archivo.txt", "r") as file:
data = file.read() # Leyendo el contenido Evita usar type() directamente para verificaciones, y usa isinstance() en su lugar.
if type(x) == int: # Error Solución: Usa isinstance():
if isinstance(x, int): # ✅ Copiar listas u objetos por referencia puede generar efectos secundarios inesperados.
a = [1, 2, 3] # Lista original
b = a # Referencia
b.append(4) # Modificando b
print(a) # ⚠️ También cambia Solución:
import copy
b = a.copy() # Para listas simples
# b = copy.deepcopy(a) # Para estructuras anidadas Capturar todas las excepciones sin control puede ocultar errores reales, lo que puede conducir a comportamientos inesperados.
try:
resultado = 10 / 0
except:
print("Algo salió mal") # ⚠️ Muy genérico Específica el tipo de excepción:
try:
resultado = 10 / 0
except ZeroDivisionError:
print("No se puede dividir entre cero") Evita nombres como x, data1, tmp sin contexto, ya que dificultan la comprensión del código.
d = 20 # ¿Qué significa 'd'? Usa nombres descriptivos:
dias_habiles = 20 Variables globales mal utilizadas pueden causar errores difíciles de depurar.
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):
x = 5
def cambiar():
global x
x = 10 Cambiar objetos mutables dentro de funciones puede afectar variables externas.
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.
def agregar(lista):
nueva = lista.copy()
nueva.append(100)
return nueva