3

我有一个模型产品

它有两个字段大小和颜色等

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

4 回答 4

8

NoneTypeNone值的类型。您想将第二个片段更改为

if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
  blah blah
于 2009-02-16T07:50:32.283 回答
1

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

if someobject.someattr is None:
    # Not set yet
于 2009-02-16T07:51:15.337 回答
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))  
于 2009-12-14T11:05:55.280 回答
-1

我不了解 Django,但我假设您执行此操作时涉及某种 ORM:

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

此时,您应该始终检查是否返回 None ('None' 与 Java 中的 'null' 或 Lisp 中的 'nil' 相同,只是在 Python 中'None' 是一个对象)。这通常是 ORM 将空集映射到编程语言的方式。

编辑: 哎呀,我只是看到current_product.sizeNone不是current_product。如前所述,我不熟悉 Django 的 ORM,但这似乎很奇怪:我希望current_productNonesize有一个数值。

于 2009-02-16T07:54:08.763 回答