考虑以下代码:
searchList=["hello", "hello world", "world"]
pattern = 'hell'
matchingList = [t for t in searchList if re.match(pattern, t)]
以上代码在Jython 2.4.3中运行正常但在Jython的较低版本中失败并出现此错误:
ValueError: iterator indices must be consecutive ints starting at 0
有任何解决方法吗?
通过以下解决方法,我得到同样的错误:
for t in searchList:
if re.match(pattern, t):
matchingList.append(t)
在Jython 2.1中看到错误
答案 0 :(得分:3)
代码在cpython 2.3.5,2.2.3,2.1.3和2.0以及jython 2.2.1,2.2和2.1上运行良好。 List comprehensions are only available in 2.0+。相反,你可以写:
# Warning: This code is unnecessarily complex because of cpython 1.x (!) support
import re
searchList=["hello", "hello world", "world"]
pattern = 'hell'
matchingList = []
for t in searchList:
if re.match(pattern, t):
matchingList.append(t)
话虽如此,甚至2.4都是古老的并且已经有一段时间不受支持了(这意味着您必须手动应用并调整所有安全补丁,从而拥有一个安全的系统)。你正在迎合的Python版本已经超过十年了,并且几乎肯定充斥着安全漏洞。考虑弃用Python 2.5及更早版本。
答案 1 :(得分:0)
经过大量调试后,我发现当您尝试第二次迭代同一列表时会出现问题。这个问题已在此报道:
http://bugs.jython.org/issue1544224
我使用了上面链接中提到的解决方法,它运行正常。
非常感谢,伙计们