2012-01-20 65 views
165

Me aparece un error que dicePython: Atributo de error - objeto 'NoneType' no tiene atributo 'algo'

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

El código que tengo es demasiado tiempo para publicar aquí, pero me preguntaba si alguien podría dar una idea de lo que los escenarios generales podrían causar este 'AttributeError', y se supone que significa 'NoneType'? (Por lo general, recibiría el nombre de algún objeto donde el código salió mal, pero dado que me da 'NoneType' no estoy seguro de cómo es posible reducir lo que está pasando, aparte de la línea #)

+5

Extraiga el código más pequeño que muestra el problema. Publica eso. Agregue las funciones 'print' (o las declaraciones que dependen de la versión) para revelar los valores reales que las variables realmente tienen en el código que está teniendo este problema. –

+1

'NoneType' mean type = None. Probablemente estés intentando acceder a una variable no declarada. Deberías publicar una idea para que podamos ayudarte. –

+2

@ LoïcGRENON: "variable no declarada"? En Python? Eso no tiene mucho sentido. ¿Cómo se podría declarar una variable? –

Respuesta

168

NoneType means que en lugar de una instancia de cualquier Clase u Objeto con el que piense que está trabajando, en realidad tiene None. Eso generalmente significa que una asignación o llamada de función anterior falló o devolvió un resultado inesperado.

69

Tiene una variable que es None y está intentando acceder a un atributo llamado 'something'.

foo = None 
foo.something = 1 

o

foo = None 
print foo.something 

Tanto producirán un AttributeError: 'NoneType'

10

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

Una forma común de que esto ocurra es llamar a una función que falta un return.

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

+1

No creo que 'lifetime' tuviera un valor de' None' (pre-edit). Él estaba tratando de acceder al _attribute_ de por vida de otra cosa que era 'None'. –

29

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

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

mylist = mylist.sort() 

El método de una lista sort() ordena la lista en el lugar, es decir, mylist se modifica. Pero el valor de retorno real del método es None y no la lista ordenada. Entonces, acaba de asignar None a mylist. Si intenta hacer, digamos, mylist.append(1) Python le dará este error.

+2

Eso es lo que estaba haciendo, asignando el valor de retorno de una función que realmente no devolvió nada a una variable. ¡Gracias! – Kaya311

4

Considere el siguiente código.

def return_something(someint): 
if someint > 5: 
    return someint 

y = return_something(2) 
y.real() 

Esto se va a dar el error

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

Así puntos son como sigue.

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