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 回答