web-dev-qa-db-fra.com

Erreur "l'objet de type 'NoneType' n'a pas de len ()"

Je vois un comportement étrange sur ce code:

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)

Mon application web2py me donne cette erreur:

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

Je ne peux pas comprendre ce qui ne va pas. Peut-être un problème de portée?

16
dmmd

Vous attribuez quelque chose de nouveau à images['cover']:

images['cover'] = pic.path_thumb_l

pic.path_thumb_l est None à un moment donné de votre code.

Vous vouliez probablement ajouter à la place:

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

votre problème est que

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

vérifie la LONGUEUR de la valeur des images ['cover'] ce que vous vouliez faire est de vérifier s'il a une valeur.

faites ceci à la place:

if not images['cover']:

9
Inbar Rose

La première fois que vous affectez: images['cover'] = pic.path_thumb_l, Il remplace la valeur de la liste vide initialement stockée dans images['cover'] Par la valeur de pic.path_thumb_l Qui est None.

Peut-être que votre code dans cette ligne doit être images['cover'].append(pic.path_thumb_l)

1
Medardo Rodriguez