web-dev-qa-db-fra.com

Pourquoi ai-je l'objet AttributeError: l'objet 'NoneType' n'a pas d'attribut 'quelque chose'?

Je continue à recevoir une erreur qui dit

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

Le code que j'ai est trop long pour poster ici. Quels scénarios généraux pourraient causer cette AttributeError, qu'est-ce que NoneType est censé vouloir dire et comment puis-je limiter ce qui se passe?

250
Jacob Griffin

NoneType signifie qu'au lieu d'une instance de la classe ou de l'objet avec lesquels vous pensez travailler, vous avez réellement None. Cela signifie généralement qu'un appel d'affectation ou de fonction ci-dessus a échoué ou a renvoyé un résultat inattendu.

246
g.d.d.c

Vous avez une variable égale à None et vous essayez d'accéder à un attribut appelé "quelque chose".

foo = None
foo.something = 1

ou

foo = None
print foo.something

Les deux vont donner un AttributeError: 'NoneType'

95
koblas

D'autres ont expliqué ce qu'est NoneType et comment y parvenir (c'est-à-dire l'impossibilité de renvoyer une valeur à partir d'une fonction).

Une autre raison courante pour laquelle vous avez None n'est pas l'attribution d'une opération sur place à un objet mutable. Par exemple:

mylist = mylist.sort()

La méthode sort() d'une liste trie la liste sur place, c'est-à-dire que mylist est modifié. Mais la valeur de retour réelle de la méthode est None et non la liste triée. Donc, vous venez d'assigner None à mylist. Si vous essayez ensuite de faire, par exemple, mylist.append(1) Python vous donnera cette erreur.

45
kindall

La NoneType est le type de la valeur None. Dans ce cas, la variable lifetime a la valeur None.

Une façon courante d’y parvenir est d’appeler une fonction manquant un return.

Il existe cependant un nombre infini d'autres façons de définir une variable sur Aucune.

16
S.Lott

Considérons le code ci-dessous.

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

y = return_something(2)
y.real()

Cela va vous donner l'erreur

AttributeError: l'objet 'NoneType' n'a pas d'attribut 'real'

Donc, les points sont comme ci-dessous.

  1. Dans le code, une méthode ou une méthode de classe ne retourne rien et ne renvoie pas la valeur None.
  2. Ensuite, vous essayez d'accéder à un attribut de cet objet renvoyé (qui est Aucun), ce qui provoque le message d'erreur.
12
PHINCY L PIOUS

Cela signifie que l'objet que vous essayez d'accéder à None. None est une variable Null en python. Ce type d'erreur est occasionné. Votre code ressemble à 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")
4
M. Hamza Rajput

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 pourriez vous retrouver avec un pointeur nul ou NoneType. Dans ce cas, vous pouvez obtenir cette erreur. Donc, avant d'accéder à un attribut de ce paramètre, vérifiez si ce n'est pas NoneType.

0
barribow