web-dev-qa-db-ja.com

リストから要素を削除しようとすると、ValueErrorを無視できますか?

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)
38
JuanPablo

これを行うための適切でスレッドセーフな方法は、それを試して例外を無視することです:

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

要素の順序が必ずしも重要でない限り、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])
26
g.d.d.c

ValueErrorを無視する代わりとして

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

次の方がもう少し簡単で読みやすいと思います。

if 10 in a:
    a.remove(10)
16
reteptilian

これを行うためのより良い方法は

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

より複雑なプログラムでは、ValueErrorの例外が他の何かについても発生する可能性があり、ここでいくつかの答えがそれを渡すだけで、将来起こりうる問題を作成しながらそれを破棄します。

0
Amey Kasar