【问题标题】:How do I tell PyLint "it's a variable, not a constant" to stop message C0103?如何告诉 PyLint“它是一个变量,而不是一个常量”来停止消息 C0103?
【发布时间】:2009-12-11 01:15:52
【问题描述】:

我的 Python 2.6 程序中有一个名为“_log”的模块级变量,PyLint 抱怨它:

C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)

阅读this answer 我明白它为什么这样做:它认为变量是一个常量并应用常量正则表达式。但是,我不敢苟同:我认为这是一个变量。我如何告诉 PyLint,所以它不会抱怨? PyLint 如何确定它是变量还是常量 - 它是否只是将所有模块级变量视为常量?

【问题讨论】:

    标签: python pylint


    【解决方案1】:
    # pylint: disable-msg=C0103
    

    将它放在您希望忽略这些警告的范围内。您还可以将上述内容设为行尾注释,以仅针对该行代码禁用消息。

    IIRC 确实 pylint 将所有模块级变量解释为“常量”。

    较新版本的 pylint 将采用这一行

    # pylint: disable=C0103
    

    【讨论】:

    • 谢谢。之后我还添加了# pylint: enable-msg=C0103,以便检查其余代码。
    • 请注意,将它放在代码行的末尾也应该只禁用此特定行的此消息(然后不需要重新启用)。
    • 我应该把这段代码放在哪里以便在我的所有 Python 源文件中禁用这个错误消息?
    • IIRC it is true that pylint interprets all module-level variables as being 'constants'. - 为什么他们仍然没有制作 Pylint 来区分 variableconstants?有什么技术挑战吗?。
    • @JaiK 好吧,Python 中的常量和(其他)变量之间没有技术差异,所以我想不出更好的方法来区分两者。 .
    【解决方案2】:

    您还可以指定在您的 pylintrc 中始终允许的“好名字”的逗号分隔列表,例如:

    [BASIC]
    good-names=_log
    

    【讨论】:

      【解决方案3】:

      在我看来,一些重构可能会有所帮助。 Pylint 将其视为一个模块,因此不期望在此级别看到变量是合理的。相反,它不会抱怨类或函数中的变量。以下范例似乎很常见并解决了问题:

      def main():
          '''Entry point if called as an executable'''
          _log = MyLog()  # . . .
      
      if __name__ == '__main__':
          main()
      

      这样做的好处是,如果你有一些有用的类,我可以在不运行你的 main.js 的情况下导入它们。 __name__ 是模块的名称,因此“if”失败。

      【讨论】:

      • 并不是所有的程序都是有main函数的脚本,比如Django的urls.py文件。
      • 这个变量只存在于函数中。它不是模块级变量。
      【解决方案4】:

      在较新版本的 pylint 中,这一行现在是

      # pylint: disable=C0103
      

      启用消息很简单

      # pylint: enable=C0103
      

      【讨论】:

        【解决方案5】:

        正如其他答案所表明的,您可以通过包含以下行来禁用特定的 PyLint 警告(例如 C0103):

        # pylint: disable=C0103
        

        但这会产生Locally disabling invalid-name 警告。请注意,如果您想提醒已禁用的警告,则此辅助警告可能很有用。如果您想在不更改配置文件的情况下静默禁用警告(这将全局禁用警告),您可以使用:

        # pylint: disable=I0011,C0103
        

        请注意,PyLint 不会发出您正在禁用 I0011 的警告!

        【讨论】:

          【解决方案6】:

          如果您在文件中本地禁用一条消息,那么 Pylint 将报告另一个不同的警告!

          Locally disabling invalid-name (C0103) [I:locally-disabled] 
          

          如果您的意图是干净的 lint 运行,并且肯定应该是目标,否则您为什么要打扰,那么您可以在配置文件中禁用该消息和相应的本地启用消息:

          disable=locally-disabled, locally-enabled
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-14
            • 2018-11-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-23
            相关资源
            最近更新 更多