Подтвердить что ты не робот

Как я могу игнорировать ValueError, когда пытаюсь удалить элемент из списка?

Как я могу игнорировать сообщение об ошибке "не в списке", если я вызываю a.remove(x), когда x нет в списке a?

Это моя ситуация:

>>> 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)
4b9b3361

Ответ 1

Хороший и надежный способ сделать это - просто попробовать и проигнорировать исключение:

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

Ответ 2

Я лично рассмотрел бы использование set вместо list, поскольку порядок ваших элементов не обязательно важен. Затем вы можете использовать метод discard:

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

Ответ 3

В качестве альтернативы игнорированию ValueError

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

Я думаю, что следующее немного более просто и понятно:

if 10 in a:
    a.remove(10)

Ответ 4

Лучший способ сделать это будет

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

Поскольку в более сложной программе исключение ValueError также может быть вызвано для чего-то другого, и несколько ответов здесь просто пропускают его, тем самым отбрасывая его, создавая при этом дополнительные проблемы.