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)
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!
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])
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)
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.