문제

모델 제품이 있습니다

두 개의 필드 크기와 색상이 있습니다

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이란 무엇이며 어떻게 테스트 할 수 있습니까?

도움이 되었습니까?

해결책

NoneType 유형입니다 None 가치가 있습니다. 두 번째 스 니펫을 변경하고 싶습니다

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

다른 팁

비에 타이프는 Pythons Null 유형으로 "아무것도", "정의되지 않은"것을 의미합니다. "없음"이 하나뿐입니다. 새 모델 객체를 만들 때, 그 속성은 일반적으로 없음으로 초기화되므로 다음을 비교하여 확인할 수 있습니다.

if someobject.someattr is None:
    # Not set yet

이 예제의 잘못된 코드에 대한 비에 타이프 오류를 가장 잘 설명 할 수 있습니다.

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'은 'none'이 파이썬의 물체라는 미묘한 차이로 LISP의 'null'과 동일합니다). 이것은 일반적으로 Orms가 빈 세트를 프로그래밍 언어에 매핑하는 방식입니다.

편집하다:이런, 난 그냥 봅니다 current_product.size 그게 None ~ 아니다 current_product. 말했듯이, 나는 Django의 ORM에 익숙하지 않지만 이것은 이상하게 보입니다. current_product 되려고 None 또는 size 수치 값이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top