0

考虑下面的代码:

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 中出现的错误

4

2 回答 2

3

该代码在 cpython 2.3.5、2.2.3、2.1.3 和 2.0 以及 jython 2.2.1、2.2 和 2.1 上运行良好。列表推导仅在 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 及更早版本。

于 2012-09-12T09:26:28.587 回答
0

经过大量调试后,我发现当您第二次尝试迭代同一个列表时会出现问题。并且已在此处报告了此问题:

http://bugs.jython.org/issue1544224

我使用了上面链接中提到的解决方法,它工作正常。

非常感谢各位

于 2012-09-12T09:59:55.683 回答