我使用的是Python2.6,很难理解为什么下面的代码会在抛出的位置抛出索引器错误。当这个版本的porterstemmer被合并到一个web服务中时,会发生错误(难以置信的少)。在
该代码涉及一系列“if-elif-elif-else”语句,这些语句检查一系列场景的输入字索引。注意self.k是一个整数值(占位符),并且自我终结(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”语句抛出索引器错误。例如:
^{pr2}$我不明白为什么对“elif”的求值是抛出一个索引器,而不是初始的“if”语句?我还没有关于什么输入抛出错误的数据(同样,这种情况非常罕见)。也有可能词干分析器正在接收某种类型的“错误”输入。。。关于Python if elifs,我有什么遗漏/应该知道的吗?(我知道“elif”不能在“if”之前。在
谢谢,如果我能提供更多的信息请告诉我。在
另外,如果您对(大部分)完整代码感兴趣,我将使用这个的修改版本:http://tartarus.org/~martin/PorterStemmer/python.txt,但我不认为这与我的问题相关。在
如果没有人修改self.b或self.k,那么反复检查它有什么意义呢?将其存储在第一个if之前的变量中,并使用它:
现在,如果其他人正在另一个线程中修改self.b或self.k,您应该在第一个if之前将其存储在一个变量中,并使用它:
相关问题 更多 >
编程相关推荐