web-dev-qa-db-ja.com

「タイプ 'NoneType'のオブジェクトにはlen()がありません」エラー

私はこのコードで奇妙な動作を見ています:

images = dict(cover=[],second_row=[],additional_rows=[])

for pic in pictures:
    if len(images['cover']) == 0:
        images['cover'] = pic.path_thumb_l
    Elif len(images['second_row']) < 3:
        images['second_row'].append(pic.path_thumb_m)
    else:
        images['additional_rows'].append(pic.path_thumb_s)

私のweb2pyアプリは私にこのエラーを与えます:

if len(images['cover']) == 0:
TypeError: object of type 'NoneType' has no len()

これで何が悪いのかわかりません。おそらくスコープの問題ですか?

16
dmmd

images['cover']に何か新しいものを割り当てます:

images['cover'] = pic.path_thumb_l

ここで、pic.path_thumb_lは、コードのある時点でのNoneです。

おそらく、代わりに追加するつもりでした:

images['cover'].append(pic.path_thumb_l)
15
Martijn Pieters

あなたの問題は

if len(images['cover']) == 0:

images ['cover']の値の長さをチェックします。それは、値があるかどうかをチェックすることです。

代わりにこれを行います:

if not images['cover']:

9
Inbar Rose

初めて割り当てる場合、_images['cover'] = pic.path_thumb_l_は、最初に_images['cover']_に格納された空のリストの値を、Noneである_pic.path_thumb_l_の値に置き換えます。

この行のコードはimages['cover'].append(pic.path_thumb_l)である必要があります

1