English 中文(简体)
Django模型返回NoneType
原标题:
  • 时间:2009-02-16 07:44:23
  •  标签:

我有一个模型产品。

它有其他功能中的两个领域大小和颜色。

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(",")

请将此翻译成中文:and get this error。

无类型对象没有长度()

什么是NoneType,我如何测试它?

最佳回答

NoneTypeNone值具有的类型。你想将第二个代码片段更改为

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

NoneType是Python的空类型,意思是“没有”,“未定义”。它只有一个值:“None”。创建新的模型对象时,它的属性通常被初始化为None,您可以通过比较来验证:

if someobject.someattr is None:
    # Not set yet

我可以通过这个错误的代码示例最好地解释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))  

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

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

在这种情况下,您应该始终检查是否返回了 None(在Python中,None与Java中的null或Lisp中的nil相同,但有一些微妙的区别,None是Python中的对象)。这通常是ORM将空集映射到编程语言的方式。

EDIT: Gee, I just see that it s current_product.size that s None not current_product. As said, I m not familiar with Django s ORM, but this seems strange nevertheless: I d either expect current_product to be None or size having a numerical value.





相关问题
热门标签