0

次のlist.index関数で何らかの形で失敗するコードのセクションがあります。

for line in flines:
    for match in bad_data_regex.findall(line):
        assert line in flines
        index = flines.index(line)
        flines.pop(index)
        # other code that does not modify flines ....

私のコードは次の場合に失敗します:

ScriptEngine.execute:Error in script Traceback (innermost last):
  File "<string>", line 168, in ?
ValueError: list.index(x): x not in list

値が本当にリストにない場合はAssertionError、関数の前に取得する必要がありましたlist.index

Java バージョン 1.6.0_18 で Jython 2.2.1 を使用しています。

これはどのように可能ですか?

編集:

そのエラーを生成していたコードは、私が上に投稿したものではないことがわかりました。私の Jython インタープリターは間違った行番号を教えてくれ、たまたま上記の index 関数のある行にたどり着きました。

上記のコードは意図したとおりに機能しますが、繰り返しながらリストを変更するのはベスト プラクティスではないことはわかっています。将来的には可能な限りそれを避けるようにします。

4

1 に答える 1

3

これはおそらくflines.pop(index)部品が原因で発生します。リストを繰り返し処理するときにリストを変更することは、常に悪い考えです。

この例を考えてみましょう。

In [1]: a = range(5)

In [2]: for i in a:
   ...:     print a.pop()
   ...: 
4
3
2

In [3]: a
Out[3]: [0, 1]
于 2012-06-13T22:31:16.273 に答える