web-dev-qa-db-fra.com

Comment puis-je ignorer ValueError lorsque j'essaie de supprimer un élément d'une liste?

Comment ignorer le message d'erreur "pas dans la liste" si j'appelle a.remove(x) lorsque x n'est pas présent dans la liste a?

Voici ma situation:

>>> a = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.remove(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> a.remove(9)
38
JuanPablo

Un bon moyen et sûr pour les threads est de l'essayer et d'ignorer l'exception:

try:
    a.remove(10)
except ValueError:
    pass  # do nothing!
40
Niklas B.

J'envisagerais personnellement d'utiliser un set au lieu d'un list tant que l'ordre de vos éléments n'est pas nécessairement important. Ensuite, vous pouvez utiliser la méthode de suppression:

>>> S = set(range(10))
>>> S
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> S.remove(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 10
>>> S.discard(10)
>>> S
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
26
g.d.d.c

Comme alternative à ignorer ValueError

try:
    a.remove(10)
except ValueError:
    pass  # do nothing!

Je pense que ce qui suit est un peu plus simple et lisible:

if 10 in a:
    a.remove(10)
16
reteptilian

Une meilleure façon de procéder serait

source_list = list(filter(lambda x: x != element_to_remove,source_list))

Parce que dans un programme plus complexe, l'exception de ValueError pourrait également être levée pour autre chose et quelques réponses ici ne font que la passer, la rejetant ainsi tout en créant plus de problèmes possibles sur la ligne.

0
Amey Kasar