2014-01-02 4 views
7

Я занимаюсь очисткой кода с помощью pylint, чтобы иметь возможность использовать его для проверки перед фиксацией. У меня есть много предупреждений о неиспользованном аргументе, когда они используются. Вот пример, вызывающий ложное срабатывание.pylint false positive для неиспользуемого аргумента

def addSeven(foo): #Here I have a warning "Unused argument 'foo'" 
    foo += [7] 

example = [3, 4, 5, 6] 

addSeven(example) 
print example 

Я не хочу, чтобы подавить в глобальном масштабе это предупреждение, потому что я хотел бы видеть время, когда аргумент действительно не используется. Есть ли другой вариант, который вручную добавляет отключенный комментарий в каждом случае? Это известная проблема с pylint?

+2

Согласно http://lists.logilab.org/pipermail/python-projects/2009-March/001800.html, это потому, что 'foo' фактически не используется внутри функции (кроме того, что это левый операнд' + = '). –

+1

Здесь вы можете изменить код, чтобы использовать 'extend' вместо' + = '. Могут быть другие такие преобразования, которые вы можете выполнить для устранения других предупреждений. – user2357112

+0

Хорошо. Это все равно оставляет меня для изменения каждого события, но оно немного чище, чем использование комментариев pylint. –

ответ

5

Это разумное поведение от pylint; если переданный объект неизменен, то данное утверждение по существу не является оператором. Только когда он изменен, он кажется неправильным.

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

+0

Вы имеете в виду «правильный no-op», или просто no-op, о котором ослепляют? И вместо того, чтобы молчать, он поднимается «на всякий случай»? Кстати, это, вероятно, ошибка давно, потому что теперь я не получаю предупреждение от pylint при проверке примеров в этом сообщении. –

4

pylint, как правило, является хорошим показателем плохого стиля. Даже когда он дает «ложный положительный результат», вероятно, это связано с тем, что он делает что-то против конвенции. Я не эксперт, но я бы сказал, что функция, которая имеет только побочный эффект, не является оптимальной. Некоторые люди (например, Роберт Мартин в «Чистом коде»), говорят, что все побочные эффекты - ложь.

Я рекомендую (опять же, я не являюсь специалистом):

def addSeven(foo): 
    return foo + [7] 

example = [3, 4, 5, 6] 

example = addSeven(example) 

Аргументы должны быть только для ввода и вывода должны быть с помощью возвращаемого значения. Насколько мне известно, аргументы вывода - это плохая практика.

Смежные вопросы