Python 2.6を使用していますが、次のコードがスローされている場所でIndexErrorをスローしている理由を理解するのに苦労しています。このバージョンのPorterStemmerがWebサービスに組み込まれている場合、エラーは(非常にまれに)発生します。
このコードには、一連のシナリオの入力単語のインデックスをチェックする一連の「if-elif-elif-else」ステートメントが含まれています。self.kは整数値(プレースホルダー)であり、self.ends(val)は0または1のいずれかを返すことに注意してください。
if self.b[self.k - 1] == 'a':
if self.ends("al"): pass
else: return
elif self.b[self.k - 1] == 'c':
if self.ends("ance"): pass
elif self.ends("ence"): pass
else: return
...additional "elifs" appear here, but none modify self.b or self.k ...
elif self.b[self.k - 1] == 's':
if self.ends("ism"): pass
else: return
ただし、まれに(入力が非常に可変である)、「elif」ステートメントの1つがIndexErrorをスローします。例えば:
line 290, in step4
elif self.b[self.k - 1] == 's':
IndexError: string index out of range
私が理解できないのは、「elif」の評価が最初の「if」ステートメントではなくIndexErrorをスローしている理由です。どの入力がエラーをスローしているかについてのデータはまだありません(繰り返しますが、発生は非常にまれです)。ステマーが何らかの「悪い」入力を受け取っている可能性もあります...Pythonif-elifsに関して私が見逃している/知っておくべきことはありますか?(「elif」を「if」の前に置くことはできないことを認識しています...)。
ありがとう、そして私が追加情報を提供できるかどうか私に知らせてください。
また、完全なコード(のほとんど)に興味がある場合は、これの修正バージョンを使用しています:http: //tartarus.org/~martin/PorterStemmer/python.txt、しかし私はこれを考えていません私の質問に関連しています。