Frage

Ich habe ein Modell Artikel

es hat zwei Felder Größe und Farben unter anderem

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

Aus meiner Sicht habe ich

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

und diesen Fehler:

Objekt vom Typ 'NoneType' hat keine len ()

Was ist NoneType und wie kann ich testen, es?

War es hilfreich?

Lösung

NoneType ist der Typ, der None Wert hat. Sie wollen den zweiten Code-Schnipsel ändern

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

Andere Tipps

NoneType ist Pythons NULL-Typ, "nichts", "unbestimmt" bedeutet. Es hat nur einen Wert: „Keine“. Wenn ein neues Modell-Objekt erstellen, werden seine Attribute in der Regel auf None initialisiert, können Sie, dass durch den Vergleich überprüfen:

if someobject.someattr is None:
    # Not set yet

Ich kann am besten erklärt die NoneType Fehler bei diesem Beispiel eines fehlerhaften Code:

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

s.remove() kehrt nichts auch als NoneType bekannt. Der richtige Weg

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

Ich weiß nicht, Django, aber ich nehme an, dass irgendeine Art von ORM beteiligt ist, wenn Sie dies tun:

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

An diesem Punkt sollten Sie immer überprüfen, ob Sie None zurück ( ‚None‘ ist das gleiche wie ‚null‘ in Java oder ‚Null‘ in Lisp mit dem feinen Unterschied, dass ‚None‘ ist ein Objekt in Python). Dies ist in der Regel die Art und Weise ORMs die leere Menge in die Programmiersprache abzubilden.

EDIT: Gee, ich sehe gerade, dass es current_product.size ist die None nicht current_product ist. Wie gesagt, ich bin mit Django ORM nicht vertraut, aber diese dennoch seltsam scheint: Ich würde entweder erwarten current_product einen numerischen Wert None oder size mit zu

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top