为什么 pylint 在“返回”(no-else-return)之后抱怨不必要的“elif”?

zyx*_*xue 5 pylint

为什么 pylint 会抱怨这个代码块?

R1705: Unnecessary "elif" after "return" (no-else-return)

def f(a):
    if a == 1:
        return 1
    elif a == 2:
        return 2
    return 3
Run Code Online (Sandbox Code Playgroud)

为了防止错误,我不得不创建一个临时变量,这感觉不太愉快。

def f(a):
    if a == 1:
        b = 1
    elif a == 2:
        b = 2
    else:
        b = 3

    return b
Run Code Online (Sandbox Code Playgroud)

解决方案:

def f(a):
    if a == 1:
        return 1
    if a == 2:
        return 2
    return 3
Run Code Online (Sandbox Code Playgroud)

Avn*_*tan 9

else块的目的是定义在条件为真时不会执行的代码,因此不会继续执行到下一个块。

但是,在您的代码中,主条件块有一个 return 语句,这意味着执行将离开函数,因此不需要 else 块:根据定义,如果条件为真,则 return 之后的所有后续代码都不会执行. 这是多余的。它可以用一个简单的if.

  • 只需将 elif 替换为 if - 在这种情况下它们在语义上是相同的,没有多余的隐式 else。 (3认同)
  • 但代码完全没问题,而且很有意义,对吧?这是 pylint 的限制/错误吗? (2认同)