"объект типа" 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()

Я не могу понять, что в этом плохого. Может быть, проблема с областью?

Ответ 1

Вы назначаете что-то новое для images['cover']:

images['cover'] = pic.path_thumb_l

где pic.path_thumb_l есть None в некоторой точке вашего кода.

Вероятно, вы хотели бы добавить:

images['cover'].append(pic.path_thumb_l)

Ответ 2

Ваша проблема в том, что

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

проверяет ДЛИННОСТЬ значения изображений ['cover'], что вы хотели сделать, это проверить, имеет ли оно значение.

сделайте это вместо:

if not images['cover']:

Ответ 3

При первом назначении: images['cover'] = pic.path_thumb_l он заменяет значение пустого списка, первоначально сохраненного в images['cover'], значением pic.path_thumb_l, которое равно None.

Возможно, ваш код в этой строке должен быть images['cover'].append(pic.path_thumb_l)