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?
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.
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'
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.
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.
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.
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")
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
.