x
がリストa
に存在しないときにa.remove(x)
を呼び出すと、「リストにない」エラーメッセージを無視できますか?
これは私の状況です:
>>> 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
を使用することを個人的に検討します。次に、廃棄メソッドを使用できます。
>>> 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
の例外が他の何かについても発生する可能性があり、ここでいくつかの答えがそれを渡すだけで、将来起こりうる問題を作成しながらそれを破棄します。