Django Model返回NoneType

时间:2009-02-16 07:44:23

标签: python django django-views

我有一个型号产品

它有两个字段大小&其他颜色

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

在我看来,我有

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

并收到此错误:

'NoneType'类型的对象没有len()

什么是NoneType,我该如何测试呢?

4 个答案:

答案 0 :(得分:8)

NoneTypeNone值所具有的类型。您想要将第二个代码段更改为

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

答案 1 :(得分:1)

NoneType是Pythons NULL-Type,意思是“没有”,“未定义”。它只有一个值:“无”。创建新模型对象时,其属性通常初始化为None,您可以通过比较来检查:

if someobject.someattr is None:
    # Not set yet

答案 2 :(得分:0)

我可以用这个错误代码示例来解释NoneType错误:

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()不返回任何名称为NoneType的内容。正确的方法

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

答案 3 :(得分:-1)

我不知道Django,但我认为当你这样做时会涉及某种ORM:

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

此时你应该总是检查你是否得到无回复('无'与Java中的'null'或者Lisp中的'nil'相同,其中微妙的区别是'无'是Python中的对象)。这通常是ORM将空集映射到编程语言的方式。

修改: 哎呀,我只是看到current_product.size None而不是current_product。如上所述,我不熟悉Django的ORM,但这看起来很奇怪:我要求current_productNonesize有数值。