Ответ 1
Хороший и надежный способ сделать это - просто попробовать и проигнорировать исключение:
try:
a.remove(10)
except ValueError:
pass # do nothing!
Как я могу игнорировать сообщение об ошибке "не в списке", если я вызываю 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)
Хороший и надежный способ сделать это - просто попробовать и проигнорировать исключение:
try:
a.remove(10)
except ValueError:
pass # do nothing!
Я лично рассмотрел бы использование 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])
В качестве альтернативы игнорированию ValueError
try:
a.remove(10)
except ValueError:
pass # do nothing!
Я думаю, что следующее немного более просто и понятно:
if 10 in a:
a.remove(10)
Лучший способ сделать это будет
source_list = list(filter(lambda x: x != element_to_remove,source_list))
Поскольку в более сложной программе исключение ValueError
также может быть вызвано для чего-то другого, и несколько ответов здесь просто пропускают его, тем самым отбрасывая его, создавая при этом дополнительные проблемы.