我的Python 2.6程序中有一个名为“ _log”的模块级变量,PyLint抱怨:
C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
阅读了这个答案后,我了解了为什么这样做:它认为变量是一个常量,并应用了常量正则表达式。但是,我希望有所不同:我认为这是一个变量。我该如何告诉PyLint,以便它不会抱怨?PyLint如何确定它是变量还是常量-它将所有模块级变量都视为常量吗?
Answers:
# pylint: disable-msg=C0103
将其放在希望忽略这些警告的范围内。您也可以将以上内容作为行尾注释,以仅针对该代码行禁用该消息。
IIRC确实pylint会将所有模块级变量解释为“常量”。
较新版本的pylint会改用此行
# pylint: disable=C0103
IIRC it is true that pylint interprets all module-level variables as being 'constants'.
-为什么他们仍然不让Pylint区分variable
&constants
?是否存在任何技术挑战?
在我看来,一些重构可能会有所帮助。Pylint将其视为一个模块,因此不要期望看到此级别的变量是合理的。相反,它不会抱怨类或函数中的var。以下范例似乎很常见,可以解决此问题:
def main():
'''Entry point if called as an executable'''
_log = MyLog() # . . .
if __name__ == '__main__':
main()
这样的好处是,如果您有一些有用的类,则可以在不运行main的情况下将其导入。该__name__是模块的这样的“如果”失败。
# pylint: enable-msg=C0103
之后,我也添加了代码,以便其余代码仍得到检查。