Pylint不理解if/else语句?

我有以下示例函数:

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:“return”后不必要的“else”

为什么它会提出这个看起来很愚蠢的警告?

回答

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

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

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

Pylint 似乎更喜欢更紧凑的版本。但是这两个版本都是完全正确的,我会说有时,if/else版本更清晰。就我个人而言,if/else如果两个主体的大小大致相同,并且仅if当其主体较短而预期else主体较长时,我才会这样做,从而为它节省了缩进级别。奖励:如果你有一个长if体和一个短else体并且以else结束return(或者在 之后的函数中没有更多的东西if/else),否定条件并最终得到一个短if体而不是else

  • I agree, the `else` version is preferable IMO. Pylint has a lot of dumb ideas, this isn't the only one.
  • @samuelbrody1249 one that is clearly stupid is: "W1638 ange built-in referenced when not iterating Used when the range built-in is referenced in a non-iterating context (returns an iterator in Python 3)" It's dead wrong about `range` returning an iterator. a `range` object is a perfectly acceptable container.

以上是Pylint不理解if/else语句?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>