19

このコードで奇妙な動作が見られます:

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

これで何が悪いのか理解できません。多分いくつかのスコープの問題?

4

3 に答える 3

17

あなたは何か新しいものを割り当てますimages['cover']

images['cover'] = pic.path_thumb_l

pic.path_thumb_lコードのあるNone時点でどこにありますか。

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

images['cover'].append(pic.path_thumb_l)
于 2012-08-05T13:33:01.427 に答える
14

あなたの問題はそれです

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

images ['cover']の値の長さをチェックします。あなたがやろうとしていたことは、それが値を持っているかどうかをチェックすることです。

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

if not images['cover']:

于 2012-08-05T13:35:39.307 に答える
1

初めて:を割り当てると、最初に格納された空のリストの値が。images['cover'] = pic.path_thumb_lの値に置き換えられます。images['cover']pic.path_thumb_lNone

たぶん、この行のコードはimages['cover'].append(pic.path_thumb_l)

于 2012-08-05T22:00:41.917 に答える