0
votes

En boucle à travers les ValueErrors à Python3

J'ai une liste de dictionnaires et une boucle xxx

Comment puis-je empêcher la boucle de casser si une valeur pour "ID" dans la plage de la boucle est absente dans les dictionnaires. ? par exemple xxx

résulte: xxx

J'ai essayé avec si ValueError: Continuer Mais ceci a entraîné la vidange final_dcts .


2 commentaires

Si ValueError: ne comprendra pas une erreur (et évalue toujours la vérité-y), vous avez besoin essayer et sauf . Voir docs.python.org/3/taturial/errors.html#Handling -Exceptions .


Merci à tous pour vos réponses et pour le lien avec la documentation officielle!


3 Réponses :


0
votes

Vous pouvez essayer d'utiliser un essai / à l'exception de la clause pour gérer l'exception et atteindre le comportement souhaité:

for i in range(3):
    try:
        type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
        final_dcts.append(type_max)
    except ValueError:
        continue


0 commentaires

0
votes

Vous pouvez utiliser un ESSAYER / SAUF CODE> Block pour l'attraper.

lst_of_dcts = [dict(keyA=True, keyB=10, id=0),
               dict(keyA=True, keyB=10, id=1),
               dict(keyA=True, keyB=10, id=2)]
final_dcts = []
for i in range(3):
    try:
        type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
        final_dcts.append(type_max)
    except ValueError as e:
        # do anything you want
        pass
print(final_dcts)


0 commentaires

0
votes

Alternativement à l'aide d'exceptions, vous pouvez itérer jusqu'à ce que i code> est égal à la valeur max de ID code>. Cependant, cela n'est viable que lorsque les valeurs code> ID code> sont une séquence continue de nombres (par exemple 0, 1, 2, ..., pas 0, 2, 3).

lst_of_dcts = [dict(keyA=True, keyB=10, id=0),
               dict(keyA=True, keyB=10, id=1),
               dict(keyA=True, keyB=10, id=2)]
final_dcts = []
max_id = max(lst_of_dcts, key=lambda x: x["id"])["id"] # max id
for i in range(max_id + 1):
    type_max = max((x for x in lst_of_dcts if x['keyA'] and x['id'] == i), key=lambda x: x['keyB'])
    final_dcts.append(type_max)
print(final_dcts)


0 commentaires