No entiendo lo que significa AttributeError

Sigo recibiendo un error que dice

AttributeError: 'NoneType' object has no attribute 'something' 

El código que tengo es demasiado largo para publicarlo aquí, pero me preguntaba si alguien podría dar una idea general de qué escenarios generales podrían causar este NoneType AttributeError , y ¿ NoneType se supone que NoneType debe significar?

Por lo general, recibiría el nombre de algún objeto en el que el código salió mal, pero dado que no me da el NoneType no estoy seguro de cómo es posible reducir lo que está sucediendo, aparte del número de línea.

NoneType significa que en lugar de una instancia de cualquier clase u objeto con el que crea que está trabajando, en realidad no tiene None . Por lo general, eso significa que una asignación o función que se muestra arriba falló o devolvió un resultado inesperado.

Tiene una variable que es igual a Ninguna y está intentando acceder a un atributo llamado “algo”.

 foo = None foo.something = 1 

o

 foo = None print foo.something 

Ambos producirán un AttributeError: 'NoneType'

Otros han explicado qué es NoneType y una forma común de terminar con él (es decir, no devolver un valor de una función).

Otra razón común por la que tiene None en la que no espera que sea la asignación de una operación in situ en un objeto mutable. Por ejemplo:

 mylist = mylist.sort() 

El método sort() de una lista ordena la lista en el lugar, es decir, se modifica mylist . Pero el valor de retorno real del método es None y no la lista ordenada. Así que no has asignado None a mylist . Si luego intenta hacerlo, por ejemplo, mylist.append(1) Python le dará este error.

El NoneType es el tipo del valor None . En este caso, la lifetime la variable tiene un valor de None .

Una forma común de que esto suceda es llamar a una función que no return .

Sin embargo, hay un número infinito de otras formas de establecer una variable en Ninguna.

Considere el siguiente código.

 def return_something(someint): if someint > 5: return someint y = return_something(2) y.real() 

Esto te va a dar el error.

AttributeError: el objeto ‘NoneType’ no tiene atributo ‘real’

Así que los puntos son los siguientes.

  1. En el código, una función o método de clase no devuelve nada o devuelve Ninguno
  2. Luego intenta acceder a un atributo de ese objeto devuelto (que es Ninguno), lo que provoca el mensaje de error.

Significa el objeto al que intenta acceder None . None es una variable Null en python. Este tipo de error se produce a partir de su código es algo como esto.

 x1 = None print(x1.something) #or x1 = None x1.someother = "Hellow world" #or x1 = None x1.some_func() # you can avoid some of these error by adding this kind of check if(x1 is not None): ... Do something here else: print("X1 variable is Null or None") 

gddc tiene razón, pero agregando un ejemplo muy frecuente:

Puede llamar a esta función de forma recursiva. En ese caso, podría terminar en un puntero nulo o en NoneType . En ese caso, puede obtener este error. Entonces, antes de acceder a un atributo de ese parámetro, compruebe si no es NoneType .