Pergunta

Eu tenho um modelo de produto

tem dois campos de tamanho e cores, entre outros

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

No meu ponto de vista eu tenho

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

e obter este erro:

objeto do tipo 'NoneType' não tem len ()

O que é NoneType e como posso testar para ele?

Foi útil?

Solução

NoneType é o tipo que o valor None tem. Você quer mudar o segundo trecho para

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

Outras dicas

NoneType é Pythons NULL-Type, que significa "nada", "indefinido". Ele tem apenas um valor: "Nenhum". Ao criar um novo modelo de objeto, seus atributos são geralmente inicializado para Nenhum, é possível verificar que, comparando:

if someobject.someattr is None:
    # Not set yet

Eu posso explicar melhor o erro NoneType com este exemplo de código errônea:

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() retornos nada também conhecido como NoneType. A maneira correta

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

Eu não sei Django, mas eu suponho que algum tipo de ORM está envolvido quando você faz isso:

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

Nesse ponto, você deve sempre verificar se você tem Nenhum volta ( 'Nenhum' é o mesmo que 'nulo' em Java ou 'nulo' em Lisp com a sutil diferença que 'Nenhum' é um objeto em Python). Esta é geralmente a maneira ORMs mapear o conjunto vazio para a linguagem de programação.

EDIT: Gee, eu só ver que é current_product.size Isso não None current_product. Como disse, eu não estou familiarizado com ORM do Django, mas isso parece estranho, no entanto: eu quer esperar current_product ser None ou size ter um valor numérico

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top