Как сообщить PyLint "это переменная, а не константа", чтобы остановить сообщение C0103?
У меня есть переменная уровня модуля в моей программе Python 2.6 с именем "_log", о которой PyLint жалуется:
C0103: Invalid name "_log" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
Прочитав этот ответ, я понимаю, почему он это делает: он считает переменную константой и применяет постоянное регулярное выражение. Тем не менее, я прошу отличить: я думаю, что это переменная. Как мне сказать PyLint, чтобы он не жаловался? Как PyLint определяет, является ли это переменной или константой - обрабатывает ли это все переменные уровня модуля как константы?
Ответы
Ответ 1
# pylint: disable-msg=C0103
Поместите его в область, где вы хотите, чтобы эти предупреждения игнорировались. Вы также можете сделать вышеописанный комментарий конца строки, чтобы отключить сообщение только для этой строки кода.
IIRC верно, что pylint интерпретирует все переменные уровня модуля как "константы".
более новые версии pylint возьмут эту строку вместо
# pylint: disable=C0103
Ответ 2
Вы также можете указать список "добрых имен", который всегда разрешен в вашем pylintrc, например:
[BASIC]
good-names=_log
Ответ 3
Кажется, мне может помочь рефактор. Pylint рассматривал это как модуль, поэтому было бы разумно не ожидать появления переменных на этом уровне. И наоборот, он не жалуется на уроки в классах или функциях. Следующая парадигма кажется довольно распространенной и решает проблему:
def main():
'''Entry point if called as an executable'''
_log = MyLog() # . . .
if __name__ == '__main__':
main()
Это имеет то преимущество, что если у вас есть несколько полезных классов, я могу импортировать их, не запуская основной. __ name __ - это имя модуля, поэтому "if" терпит неудачу.
Ответ 4
В новых версиях pylint эта строка теперь
# pylint: disable=C0103
сообщение включения так же просто
# pylint: enable=C0103
Ответ 5
Если вы отключите сообщение локально в своем файле, тогда Pylint сообщит другое предупреждение!
Locally disabling invalid-name (C0103) [I:locally-disabled]
Если вы намерены провести чистый пробег, и, конечно же, это должно быть целью, в противном случае, почему вы беспокоитесь, тогда вы можете отключить это сообщение и соответствующее локальное сообщение в файле конфигурации:
disable=locally-disabled, locally-enabled
Ответ 6
Как указывалось в других ответах, вы можете отключить определенное предупреждение PyLint (такое C0103), как включить следующую строку:
# pylint: disable=C0103
но это генерирует предупреждение Locally disabling invalid-name
. Обратите внимание, что это вторичное предупреждение может быть полезно, если вы хотите напомнить об отключенном предупреждении. Если вы хотите отключить предупреждение без изменения вашего конфигурационного файла (который будет отключать предупреждение глобально), вы можете использовать:
# pylint: disable=I0011,C0103
Обратите внимание, что PyLint не выдаёт предупреждение о том, что вы отключите I0011!