Domanda

Ho un modello prodotto

ha due campi di dimensioni e colori, tra gli altri

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

A mio avviso ho

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

e ottenere questo errore:

oggetto di tipo 'NoneType' non ha len ()

Che cos'è NoneType e come posso provare per esso?

È stato utile?

Soluzione

NoneType è il tipo che il valore None ha. Si desidera modificare il secondo snippet

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

Altri suggerimenti

NoneType è Pythons NULL-Type, che significa "niente", "indefinito". Ha un solo valore: "Nessuno". Quando si crea un nuovo oggetto del modello, i suoi attributi sono normalmente inizializzati su Nessuno, è possibile verificare che confrontando:

if someobject.someattr is None:
    # Not set yet

Posso spiegare meglio l'errore NoneType con questo esempio di codice errato:

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

ritorna s.remove() nulla conosciuto anche come NoneType. Il modo corretto

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

Non so Django, ma suppongo che un qualche tipo di ORM è coinvolto quando si esegue questa:

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

A questo punto si dovrebbe sempre verificare se si ottiene Nessuno indietro ( 'Nessuno' è lo stesso di 'nulla' in Java o 'zero' in Lisp con la sottile differenza che 'Nessuno' è un oggetto in Python). Questo di solito è il modo in cui ORM mappa l'insieme vuoto al linguaggio di programmazione.

EDIT: Accidenti, mi basta vedere che è current_product.size che è None non current_product. Come detto, io non sono a conoscenza ORM di Django, ma questo sembra strano comunque: mi piacerebbe o aspetto current_product da None o size avere un valore numerico

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top