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_lNone的某个位置。

您可能打算改为附加:

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时,它会将最初存储的空列表的值替换为isimages['cover']的值。pic.path_thumb_lNone

也许你在这一行的代码必须是images['cover'].append(pic.path_thumb_l)

于 2012-08-05T22:00:41.917 回答