Question

J'ai un modèle produit

il a entre autres deux champs taille et les couleurs

colours = models.CharField(blank=True, null=True, max_length=500)
size = models.CharField(blank=True, null=True, max_length=500)

À mon avis, j'ai

current_product = Product.objects.get(slug=title)
if len(current_product.size) != 0 :
    current_product.size = current_product.size.split(",")

et obtenir cette erreur:

objet de type 'NoneType' n'a pas len ()

Qu'est-ce que NoneType et comment puis-je tester pour cela?

Était-ce utile?

La solution

NoneType est le type que la valeur de None a. Vous voulez changer le deuxième extrait à

if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
  blah blah

Autres conseils

NoneType est Pythons NULL-type, ce qui signifie "rien", "non défini". Il n'a qu'une seule valeur: « Aucun ». Lors de la création d'un nouvel objet modèle, ses attributs sont généralement initialisés à Aucun, vous pouvez vérifier que en comparant:

if someobject.someattr is None:
    # Not set yet

Je peux mieux expliquer l'erreur de NoneType avec cet exemple de code erroné:

def test():  
    s = list([1,'',2,3,4,'',5])  
    try:  
        s = s.remove('') # <-- THIS WRONG because it turns s in to a NoneType  
    except:  
        pass  
    print(str(s))  

retourne s.remove() rien aussi connu sous le nom NoneType. La manière correcte

def test2()  
    s = list([1,'',2,3,4,'',5])  
    try:  
        s.remove('') # <-- CORRECTED  
    except:  
        pass  
    print(str(s))  

Je ne sais pas Django, mais je suppose que certains types de ORM est impliqué quand vous faites ceci:

current_product = Product.objects.get(slug=title)

A ce moment-là, vous devriez toujours vérifier si vous obtenez Aucun retour ( « None » est la même chose que « nul » en Java ou « nul » en Lisp avec la différence subtile que « Aucun » est un objet en Python). Ce sont généralement les ORM façon carte l'ensemble vide au langage de programmation.

EDIT: Gee, je vois juste qu'il est current_product.size qui est None pas current_product. Comme l'a dit, je ne suis pas familier avec l'ORM de Django, mais cela semble étrange quand même: je soit attendre current_product à None ou size ayant une valeur numérique

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top