質問

私はモデルの製品を持っている。

これは、とりわけ二つのフィールドサイズ&カラーを持っている。

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で、どのように私はそれをテストすることができますか?

役に立ちましたか?

解決

NoneTypeNone値を有するタイプです。あなたは、

に2つ目のスニペットを変更したいです
if current_product.size: # This will evaluate as false if size is None or len(size) == 0.
  blah blah

他のヒント

NoneTypeは "未定義"、 "何を" を意味しない、ニシキヘビNULL型です。 「なし」:それは、1つの値のみを持っています。新しいモデルのオブジェクトを作成する場合、その属性は通常、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を取得しないかどうかを確認する必要があります( 'なしのJavaの「ヌル」または「なし」はPythonではオブジェクトではないことを微妙な違いを持つLispでは「nil」のと同じではありません)。これは通常のORMは、プログラミング言語に空のセットをマッピングする方法です。

編集の うわあ、私はちょうどそれがcurrent_product.sizeないNonecurrent_productだことがわかります。言ったように、私は、DjangoのORMに慣れていないんだけど、これはそれにもかかわらず、奇妙なようだ:私はcurrent_productが数値を持つNonesizeことを期待したいのいずれか

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top