425 votes

Pourquoi est-ce que j'obtiens AttributeError : 'NoneType' object has no attribute 'something' ?

Je continue à obtenir une erreur qui dit

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

Le code que j'ai est trop long pour être affiché ici. Quels sont les scénarios généraux qui pourraient provoquer ce AttributeError Qu'est-ce que c'est ? NoneType et comment je peux réduire ce qui se passe ?

11 votes

Sortez le plus petit bout de code qui démontre le problème. Affichez ça. Ajoutez print (ou déclarations selon la version) pour révéler les valeurs réelles des variables dans le code qui pose problème.

1 votes

NoneType' signifie type = None. Vous essayez probablement d'accéder à une variable non déclarée. Vous devriez poster un gist pour que nous puissions vous aider.

2 votes

@LoïcGRENON : "variable non déclarée" ? En Python ? Cela n'a pas beaucoup de sens. Comment déclarer une variable ?

5voto

Shah Vipul Points 156
if val is not None:
    print(val)
else:
    pass

vérifier si une donnée particulière n'est pas vide ou nulle.

4voto

Hamza Points 125

Cela signifie que l'objet auquel vous essayez d'accéder None . None est un Null variable en python. Ce type d'erreur se produit lorsque votre code est quelque chose comme ceci.

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

3voto

Chiel Points 352

Lorsque vous construisez un estimateur (sklearn), si vous oubliez de retourner self dans la fonction fit, vous obtenez la même erreur.

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 : L'objet 'NoneType' n'a pas d'attribut 'transform' ?

Ajout de return self à la fonction d'ajustement corrige l'erreur.

1 votes

Il est peut-être utile de souligner que les fonctions qui ne sont pas explicitement return tout sera implicitement return None . C'est également le cas si votre fonction est fondamentalement if something: return value qui se retrouvera ensuite dans l'implicite return None les limbes quand something n'est pas véridique. (La réponse de PHINCY L PIOUS développe ce cas particulier).

1voto

barribow Points 79

G.d.d.c. a raison, mais en ajoutant un exemple très fréquent :

Vous pouvez appeler cette fonction sous une forme récursive. Dans ce cas, vous risquez de vous retrouver avec un pointeur nul ou un NoneType . Dans ce cas, vous pouvez obtenir cette erreur. Donc, avant d'accéder à un attribut de ce paramètre, vérifiez s'il n'est pas NoneType .

0 votes

Ouais, ok, mais comment tu fais ce contrôle ?

0 votes

Si foo == Aucun :

0 votes

if foo is not None:

0voto

fjgarzon Points 1

Peut-être avez-vous une méthode qui ne renvoie pas un objet correct ou cette méthode assigne un résultat mais ne renvoie pas un objet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X