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 のバージョンは10 年以上前のものであり、ほぼ確実にセキュリティの脆弱性に悩まされています。Python 2.5 以前の廃止を検討してください。

于 2012-09-12T09:26:28.587 に答える
0

多くのデバッグの後、同じリストを 2 度目に反復しようとすると問題が発生することがわかりました。この問題は次の場所で報告されています。

http://bugs.jython.org/issue1544224

上記のリンクに記載されている回避策を使用しましたが、正常に動作します。

どうもありがとう、皆さん

于 2012-09-12T09:59:55.683 に答える