Как мне сказать PyLint "это переменная, а не константа", чтобы остановить сообщение C0103?


У меня есть переменная уровня модуля в моей программе Python 2.6 с именем "_log", на которую жалуется PyLint:

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

прочитав этот ответ, я понимаю, почему он это делает: он думает, что переменная является константой и применяет постоянное регулярное выражение. Однако я позволю себе не согласиться: я думаю, что это переменная. Как мне сказать PyLint, так что он не жалуется? Как PyLint определяет, является ли это переменной или константой - он просто обрабатывает все переменные уровня модуля как константы?

6 57

6 ответов:

# pylint: disable-msg=C0103

поместите его в область, где вы хотите, чтобы эти предупреждения игнорировались. Вы также можете сделать выше комментарий конца строки, чтобы отключить сообщение только для этой строки кода.

IIRC верно, что pylint интерпретирует все переменные уровня модуля как "константы".

новые версии pylint будут принимать эту строку вместо

# pylint: disable=C0103

вы также можете указать разделенный запятыми список "хороших имен", которые всегда разрешены в вашем pylintrc, например:

[BASIC]
good-names=_log

Мне кажется, немного рефакторинга может помочь. Pylint рассматривает это как модуль, поэтому было бы разумно не ожидать увидеть переменные на этом уровне. И наоборот, он не жалуется на vars в классах или функциях. Следующая парадигма кажется довольно распространенной и решает проблему:

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

if __name__ == '__main__':
    main()

Это имеет то преимущество, что если у вас есть некоторые полезные классы, я могу импортировать их без вашей основной. Элемент _ _ name__ - это модуль так "если" неудачи.

в новых версиях pylint эта строка теперь

# pylint: disable=C0103

включить сообщение так же просто

# pylint: enable=C0103

как показали другие ответы, вы можете отключить конкретное предупреждение PyLint (например, C0103), включив следующую строку:

# pylint: disable=C0103

но это создает Locally disabling invalid-name предупреждение. Обратите внимание, что это дополнительное предупреждение может быть полезно, если вы хотите, чтобы вам напомнили об отключенном предупреждении. Если вы хотите отключить предупреждение молча, не изменяя файл конфигурации (который отключит предупреждение глобально) , вы можете использовать:

# pylint: disable=I0011,C0103

обратите внимание, что PyLint не выдает предупреждение о том, что вы отключаете I0011!

Если вы отключите сообщение локально в вашем файле, то Pylint сообщит еще одно другое предупреждение!

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

Если ваше намерение заключается в чистом запуске lint, и, конечно же, это должно быть целью в противном случае, почему вы беспокоитесь, то вы можете отключить это сообщение и соответствующее локально включенное сообщение в файле конфигурации:

disable=locally-disabled, locally-enabled