Comment puis-je ignorer ValueError lorsque j'essaie de supprimer un élément d'une liste?
Comment puis-je ignorer le "pas dans la liste" message d'erreur si je l'appelle a.remove(x)
quand x
n'est pas présent dans la liste a
?
C'est 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)
- Pourquoi ne pas Python liste ont également Python set de jeter de l'opération?
discard
supprime l'élément de la série, si elle est présente.
InformationsquelleAutor JuanPablo | 2012-03-28
Vous devez vous connecter pour publier un commentaire.
Une bonne et thread-safe façon de le faire est de simplement essayer d', et d'ignorer l'exception:
Je serais personnellement envisager d'utiliser un
set
au lieu d'unlist
aussi longtemps que l'ordre des éléments n'est pas nécessairement important. Ensuite, vous pouvez utiliser le jeter méthode:set
lorsqu'il n'est pas approprié peut avoir des conséquences inattendues. À partir de la documentation,Remove the first item from the list whose value is x. It is an error if there is no such item.
OP peut voulez seulement de supprimer le premier élément dans d'autres cas d'utilisation, indiquant valide les doublons dans la liste.Comme une alternative à la ignorant la ValueError
Je pense que la suite est un peu plus simple et lisible:
10
pourrait être retiré dea
entre lesif
condition d'être vérifié et.remove()
être appelé, résultant en une uncaughtValueError
. (Si vous pouvez apporter une garantie sura
pas être modifié par n'importe quoi d'autre, alors c'est bien, mais avec la accepté de répondre que vous n'avez même pas à penser à propos de cette possibilité.)a in 10 and a.remove(10)
fait le travail. Il n'est pas thread-safe si.Une meilleure façon de le faire serait
Parce que dans un programme plus complexe, à l'exception de
ValueError
pourraient également être mobilisé pour quelque chose d'autre et quelques réponses ici qu'à faire passer, donc de s'en débarrasser tout en créant plus de problèmes possibles en bas de la ligne.