【问题标题】:Pylint: Disable Unnecessary "else" after "return" (no-else-return) warningPylint:在“return”(no-else-return)警告后禁用不必要的“else”
【发布时间】:2017-07-27 00:49:47
【问题描述】:

我正在查看我的 RC 文件,但我终生无法找到这些变量中的哪一个禁用了该功能。

我搜索了“if”、“else”和“return”,但什么也没看到。除非我错过了。

谢谢。

更多信息

pylint 1.7.2,
astroid 1.5.3
Python 2.7.10 (default, Jul 30 2016, 18:31:42)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]

我在终端中输入的内容

pylint --rcfile=.pylintrc Test.py

测试代码

""" Module Docstring """

def IS_POSITIVE(number):
    """ detects positive """
    if number > 0:
        return "+++"
    else:
        return "---"


print IS_POSITIVE(3)

打印出来

************* Module Test
R: 27, 4: Unnecessary "else" after "return" (no-else-return)

------------------------------------------------------------------
Your code has been rated at 8.00/10 (previous run: 8.00/10, +0.00)

【问题讨论】:

  • 一种选择是聆听并删除“else”子句,只删除return "---"。有一个question 关于哪些是 Python 中的首选,我认为没有明确的答案,但 pylint 似乎在“没有别的”方面发挥了作用。
  • 是的,我知道,我已经通过更改代码来做到这一点,但它仍然困扰着我。 Tams Hegedus 通过指出我应该简单地添加“no-else-return=no”来关闭此选项来帮助我,但它仍然不起作用。这让我永无止境。
  • 除了规则本身的奇怪之外,它的名字很糟糕:应该是no-return-else
  • @Biclops 将 pylint 命令行更改为 --disable=R1705

标签: python pylint pylintrc


【解决方案1】:

您应该将no-else-return 添加到.pylintrc 文件中disable 设置中的禁用选项的逗号分隔列表中。

另请参阅 Pylint 文档:
http://pylint.pycqa.org/en/latest/technical_reference/features.html#messages-control-options

【讨论】:

  • 谢谢。当然,我应该在手册中搜索禁用。再次感谢您。
【解决方案2】:

您正在寻找no-else-return (R1705)。只需将这些添加到您的.pylintrc

[REFACTORING]
no-else-return=no

【讨论】:

  • 不幸的是,没有这样做。我在我的问题中添加了更多信息。我的 RC 文件在我的工作目录中,它正在接受我的更改,因为我一直在修改允许的变量/函数/类名称的正则表达式。我不知道这是否重要,但 no-else-return 变量不在默认的 RC 文件中。谢谢。
  • @Biclops 你也可以在 [MESSAGES CONTROL] 下添加disable=R1705 .pylintrc
【解决方案3】:

在这种特殊情况下,最好使用三元运算符。

def is_positive(number):
    return "+++" if number > 0 else "---"

【讨论】:

    【解决方案4】:

    为了让 pylint 开心,像下面这样解决

        (1)
        jobdone = False
        if (not fdb) and (source.lower() in space.SOURCE):
            _ = space.SOURCE[source.lower()]
            _().dojob()
            jobdone = True
        elif fdb and (source.lower() in space.SOURCE):
            _ = space.SOURCE[source.lower()]
            _().dojob()
            jobdone = True
    
        if jobdone:
            break
        (2)
        retval = None
        if (not fdb) and (source.lower() in space.SOURCE):
            _ = space.SOURCE[source.lower()]
            retval = _().getter()
            jobdone = True
        elif fdb and (source.lower() in space.SOURCE):
            _ = space.SOURCE[source.lower()]
            retval = _().getter()
            jobdone = True
    
        if jobdone:
            return retval
    

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      • 2017-05-16
      • 2010-12-21
      • 2015-10-28
      相关资源
      最近更新 更多