我有一段代码在以下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解释器给了我错误的行号,并且恰好落在了上面的索引函数的行上。
上面的代码确实按照我的意图工作,虽然我意识到在迭代它时修改列表并不是最好的做法。我将尽力避免在将来发生这种情况。
答案 0 :(得分: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]