代码之家  ›  专栏  ›  技术社区  ›  EMP

如何告诉pylint“它是一个变量,而不是一个常量”来停止消息C0103?

  •  60
  • EMP  · 技术社区  · 15 年前

    我的python 2.6程序中有一个模块级变量,名为“Log”,pylint抱怨说:

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

    读过 this answer 我理解它为什么这样做:它认为变量是一个常量,并应用常量regex。不过,我也不同意:我认为这是一个变量。我该怎么告诉皮林,这样就不会抱怨了?pylint如何确定它是变量还是常量-它只是将所有模块级变量都视为常量吗?

    6 回复  |  直到 9 年前
        1
  •  86
  •   studioj    9 年前
    # pylint: disable-msg=C0103
    

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

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

    更新版本的pylint将改为使用此行

    # pylint: disable=C0103
    
        2
  •  20
  •   AdamR    9 年前

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

    [BASIC]
    good-names=_log
    
        3
  •  16
  •   ryszards0.02c    10 年前

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

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

    这样做的好处是,如果您有一些有用的类,我可以在不运行主类的情况下导入它们。这个 _姓名__ 是模块的,所以“如果”失败。

        4
  •  11
  •   studioj    10 年前

    在更新版本的pylint中,该行现在是

    # pylint: disable=C0103
    

    启用消息非常简单

    # pylint: enable=C0103
    
        5
  •  3
  •   banbh    9 年前

    如其他答案所示,您可以通过包括以下行来禁用特定的Pylint警告(如C0103):

    # pylint: disable=C0103
    

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

    # pylint: disable=I0011,C0103
    

    请注意,pylint不会发出警告,说明您正在禁用i0011!

        6
  •  2
  •   RobG    10 年前

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

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

    如果您的目的是进行一次干净的lint运行,而且这肯定是目标,否则您为什么要担心,那么您可以在配置文件中禁用该消息和相应的本地启用消息:

    disable=locally-disabled, locally-enabled