Python:“elif”可以在“if”之前求值吗?

2024-04-24 10:39:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是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,但我不认为这与我的问题相关。在


Tags: 代码self版本webreturnif错误场景
1条回答
网友
1楼 · 发布于 2024-04-24 10:39:42

如果没有人修改self.b或self.k,那么反复检查它有什么意义呢?将其存储在第一个if之前的变量中,并使用它:

c = self.b[self.k - 1]
if c=='a': ...
elif c=='c': ...

现在,如果其他人正在另一个线程中修改self.b或self.k,您应该在第一个if之前将其存储在一个变量中,并使用它:

c = self.b[self.k - 1]
if c=='a': ...
elif c=='c': ...

相关问题 更多 >