我有一个型号产品
它有两个字段大小&其他颜色
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,我该如何测试呢?
答案 0 :(得分:8)
NoneType
是None
值所具有的类型。您想要将第二个代码段更改为
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_product
为None
或size
有数值。