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
主体并且 else
以 return
结尾(或者 [=16= 之后的函数中没有更多内容) ]), 否定条件并以短 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: 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
主体并且 else
以 return
结尾(或者 [=16= 之后的函数中没有更多内容) ]), 否定条件并以短 if
主体结束,没有 else
.