AttributeError: el objeto real no tiene el atributo o método que esperabas
Antes de buscar “cómo añadir el atributo”, comprueba qué objeto tienes de verdad. Muchos AttributeError son en realidad errores sobre el origen del dato.
Pregunta primero: ¿qué objeto tengo?
print(objeto) print(type(objeto))
Si esperabas una lista pero recibiste None, corregir el nombre del método no resolverá la causa. Sigue el valor hacia atrás hasta la función o rama que lo produjo.
El caso “NoneType object has no attribute”
def buscar_usuario(id):
return None
usuario = buscar_usuario(7)
print(usuario.nombre)La línea que falla intenta usar .nombre, pero la pregunta importante es por qué buscar_usuario devolvió None y qué debería ocurrir cuando no hay usuario.
Otros dos orígenes frecuentes
Nombre de método incorrecto
Escribiste .apend() en lugar de .append() o recuerdas un método de otro tipo.
Reasignación accidental
Una variable que era objeto de una clase pasa a contener un string, número u otro valor antes del uso.
No confundir con KeyError
objeto.nombre busca un atributo; diccionario["nombre"] busca una clave. Aunque visualmente expresen “obtener un dato”, siguen mecanismos distintos y producen excepciones distintas.
Referencia técnica: documentación oficial de excepciones de Python.