Pylint 不理解 if/else 语句?

Pylint not understanding an if/else statement?

我有以下示例函数:

def example(inp):
    if not isinstance(inp, list):
        return 'Not list'
    else:
        return 'List'

>>> example('asdf')
'Not list'
>>> example(['asdf',])
'List'

然而 pylint 抱怨说:

no-else-return: Unnecessary "else" after "return"

为什么会发出那个看起来很愚蠢的警告?

因为它相当于这个更短的代码:

if not isinstance(inp, list):
    return 'Not list'
return 'List'

具体来说,当 if 的主体以 return 结尾时,假条件的代码是否在 else 中并不重要:它只有在 if 条件为假时才会执行,因为如果条件为真,函数将在 if 主体的末尾 return。

Pylint 似乎更喜欢更紧凑的版本。但是这两个版本都是完全正确的,我会说有时 if/else 版本更清楚。就个人而言,如果两个主体的大小大致相同,我会 if/else ,如果主体较短而可能的 else 主体较长,则只 if ,从而节省缩进水平。奖励:如果你有一个长的 if 主体和一个短的 else 主体并且 elsereturn 结尾(或者 [=16= 之后的函数中没有更多内容) ]), 否定条件并以短 if 主体结束,没有 else.