我正在使用 Python 2.6,并且很难理解为什么以下代码在它被抛出的位置抛出一个 IndexError。当将此版本的 Porter Stemmer 合并到 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”语句之一会引发 IndexError。例如:
line 290, in step4
elif self.b[self.k - 1] == 's':
IndexError: string index out of range
我无法理解的是为什么对“elif”的评估会抛出 IndexError 而不是最初的“if”语句?我还没有关于什么输入引发错误的数据(同样,这种情况非常罕见)。词干分析器也有可能收到某种类型的“坏”输入......关于 Python if-elifs,我有什么遗漏/应该注意的吗?(我知道“elif”不能在“if”之前......)。
谢谢,如果我可以提供任何其他信息,请告诉我。
另外,如果您对(大部分)完整代码感兴趣,我正在使用它的修改版本:http ://tartarus.org/~martin/PorterStemmer/python.txt ,但我不这么认为与我的问题有关。