为什么 pylint 会抱怨这个代码块?
R1705: Unnecessary "elif" after "return" (no-else-return)
def f(a):
if a == 1:
return 1
elif a == 2:
return 2
return 3
为了防止错误,我不得不创建一个临时变量,这感觉不太愉快。
def f(a):
if a == 1:
b = 1
elif a == 2:
b = 2
else:
b = 3
return b
解决方案:
def f(a):
if a == 1:
return 1
if a == 2:
return 2
return 3
else
块的目的是定义如果条件为真则不会执行的代码,因此不会继续执行下一个块。
但是,在您的代码中,主条件块有一个 return 语句,这意味着执行将离开该函数,因此不需要 else 块:根据定义,如果条件满足,则 return 后的所有后续代码将不会被执行真的。这是多余的。可以用简单的if
代替。
def f(a):
if a == 1:
return 1
elif a == 2:
return 2
return 3
可能比更具可读性
def f(a):
if a == 1:
return 1
if a == 2:
return 2
return 3
对于许多用户来说,仅仅是因为它看起来像一个switch 语句 “结构模式匹配”
已添加到Python 3.10中。它的语法功能强大且用途广泛。其中,它允许简单的示例,看起来像 switch 语句:
"""
https://stackoverflow.com/questions/63755912/
why-does-pylint-complain-about-unnecessary-elif-after-return-no-else-return
"""
def match_case_example(value):
"""
Simple match-case example, for python 3.10+
see https://peps.python.org/pep-0622/
"""
match value:
case 1:
return 1
case 2:
return 2
case _other:
return 3
print(match_case_example(4))
# 3
Pylint 没有任何东西
可以抱怨这个脚本,只要你有 Python 3.10 或更高版本。