¿Por qué tengo AttributeError: 'NoneType' objeto no tiene atributo 'algo'?

Estoy recibiendo un mensaje de error que dice

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

¿Cómo puedo entender este mensaje?

¿Qué escenarios generales podrían causar tal AttributeError¿Y cómo puedo identificar el problema?


Este es un caso especial AttributeErrors. Merece un tratamiento separado porque hay muchas maneras de conseguir un inesperado None valor del código, por lo que es típicamente un problema diferente; para otro AttributeErrors, el problema puede ser tan fácilmente el nombre del atributo.

Véase también ¿Qué es un valor Ninguno? y ¿Qué es un objeto 'NoneType'? para comprender None y su tipo, NoneType.

Pregunta hecha hace 12 años, 1 meses, 5 días - Por algorithmwhiz


11 Respuestas:

  • Ninguno Tipo significa que en lugar de una instancia de cualquier clase o Objeto con el que crees que estás trabajando, en realidad tienes None. Esto normalmente significa que una asignación o función llamada arriba falló o devolvió un resultado inesperado.

    Respondida el Jan 20, 2012 a las 23:48 - por codemaster89

    Votos positivos: 0 | Votos negativos: 0

  • Usted tiene una variable que es igual a Ninguno y usted está tratando de acceder a un atributo de él llamado 'algo'.

    foo = None
    foo.something = 1
    

    o

    foo = None
    print(foo.something)
    

    Ambos rendirán un AttributeError: 'NoneType'

    Respondida el Jan 20, 2012 a las 23:56 - por pixelpioneer

    Votos positivos: 0 | Votos negativos: 0

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

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

    Hay un número infinito de otras maneras de establecer una variable a Ninguno, sin embargo.

    Respondida el Jan 21, 2012 a las 00:04 - por cyberscribe

    Votos positivos: 0 | Votos negativos: 0

  • Considere el código de abajo.

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

    Esto va a darte el error

    AttributeError: 'NoneType' objeto no tiene atributo 'real '

    Así que los puntos son como abajo.

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

    Respondida el Jan 21, 2012 a las 00:13 - por scriptsorcererf493

    Votos positivos: 0 | Votos negativos: 0

  • if val is not None:
        print(val)
    else:
        # no need for else: really if it doesn't contain anything useful
        pass
    

    Compruebe si los datos particulares no están vacíos o nulos.

    Respondida el Jan 21, 2012 a las 00:23 - por coderchampion

    Votos positivos: 0 | Votos negativos: 0

  • Significa el objeto que intentas acceder None. None es un Null variable en pitón. Este tipo de error se producee de a su código es algo así.

    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")
    

    Respondida el Jan 21, 2012 a las 00:31 - por bytebarricade

    Votos positivos: 0 | Votos negativos: 0

  • Cuando se construye un estimador (sklearn), si se olvida de devolverse a sí mismo en la función de ajuste, se obtiene el mismo error.

    class ImputeLags(BaseEstimator, TransformerMixin):
        def __init__(self, columns):
            self.columns = columns
    
        def fit(self, x, y=None):
            """ do something """
    
        def transfrom(self, x):
            return x
    

    AttributeError: 'NoneType' objeto no tiene atributo 'transform'?

    Añadiendo return self a la función de ajuste fija el error.

    Respondida el Jan 21, 2012 a las 00:37 - por codechampion

    Votos positivos: 0 | Votos negativos: 0

  • g.d.d.c. es correcto, pero añadiendo un ejemplo muy frecuente:

    Puede llamar a esta función en forma recursiva. En ese caso, podría terminar en null pointer o NoneType. En ese caso, puede obtener este error. Así que antes de acceder a un atributo de ese parámetro comprobar si no NoneType.

    Respondida el Jan 21, 2012 a las 00:43 - por logicluminary3c42

    Votos positivos: 0 | Votos negativos: 0

  • Usted puede obtener este error con usted ha comentado HTML en una aplicación de Flask. Aquí el valor de la cual. date_expiry es Ninguno:

        {{ qual.date_expiry.date() }} 
    

    Eliminar la línea o arreglarla:

    {% if qual.date_attained != None %} {{ qual.date_attained.date() }} {% endif %} 
    

    Respondida el Jan 21, 2012 a las 00:51 - por geekglitcher

    Votos positivos: 0 | Votos negativos: 0

  • Cuando recibes el mensaje de error "AttributeError: 'NoneType' object has no attribute 'something'", significa que estás intentado acceder a un atributo o método de un objeto que es de tipo None, es decir, no tiene valor asignado. Esto puede ocurrir cuando una función no devuelve nada explícitamente, lo que en Python se traduce a None.

    Hay algunos escenarios generales que podrían causar este error:

    • Una función no retorna un valor: Si estás llamando a una función que no tiene una declaración de retorno, esta función por defecto retornará `None`.
    • Una operación que debería retornar un valor está fallando: Por ejemplo, si estás intentado acceder a un método de un objeto que no ha sido inicializado correctamente.

    Para identificar el problema, te recomiendo revisar el flujo de tu programa y asegurarte de que estás obteniendo los valores esperados en cada paso. Puedes hacer lo siguiente:

    • Verifica si estás asignando el resultado de una función a una variable. Si lo estás haciendo, asegúrate de que la función realmente retorne un valor.
    1. A

    Respondida el Jan 21, 2012 a las 23:46 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Entendiendo el mensaje de error

    El mensaje de error indica que estás intentando acceder a un atributo llamado "algo" en un objeto que es de tipo NoneType. NoneType es un tipo especial en Python que representa la ausencia de un valor.

    Escenarios generales que pueden causar AttributeError: 'NoneType'

    Asignación no inicializada: Una variable puede tener asignado el valor None si no se ha inicializado correctamente. Retorno de función: Una función puede devolver None explícitamente o devolver None implícitamente si no hay un valor de retorno especificado. Llamadas de método: Intentar llamar a un método en un objeto que es None resultará en un AttributeError. Operadores: Algunos operadores, como el operador de acceso a atributos (.), devolverán None si se operan en un objeto None.

    Identificación del problema

    Para identificar el problema, sigue estos pasos:

    • Revisa las asignaciones: Verifica si la variable que contiene el objeto `None` se ha inicializado correctamente.
    • Inspecciona las funciones: Determina si alguna función involucrada está devolviendo `None` explícita o implícitamente.
    • Verifica las llamadas de método: Asegúrate de que estás llamando a métodos sobre objetos que no son `None`.
    • Examina los operadores: Revisa si estás utilizando operadores que pueden devolver `None` cuando se operan en objetos `None`.

    Ejemplo

    Supongamos que tienes el siguiente código:

    python
    def get_name(person):
        return person.name
    
    person = None
    name = get_name(person)
    

    En este ejemplo, person es None y llamar a get_name(person) devolverá None. Intentar acceder a un atributo (name) en None dará como resultado el AttributeError. Para resolver este problema, debes verificar primero si person no es None antes de llamar a get_name.

    Respondida el Jan 21, 2012 a las 23:54 - por Gemini

    Votos positivos: 0 | Votos negativos: 0