2012-03-09 3 views
2

После моего предыдущего вопроса ("Pylint E0202 False Positive?") здесь является еще один (весьма специфично, я думаю)Pylint E1103 False Positive?

мы используем модуль подпроцесс для выполнения, а, подпроцесса.
Создание примера кода привело к следующим результатам:

"Example code for E1103" 

import subprocess 

pipeOpen = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 

(responseData, errorData) = pipeOpen.communicate() 

print "Error code: '%s'. Error data: '%s'" % (pipeOpen.returncode, errorData.strip("\n").strip("\r")) 

Pylint будет сказать, хотя:

E1103: 9,67: экземпляр 'списка' не имеет ни одного члена 'стрип' (но некоторые типы не удалось сделать так)

Входя в трубкуOpen.communicate(), он переходит в _communicate. И действительно, stderr инициализируется списком, однако перед возвратом, если self.universal_newlines истинно, тогда он преобразует список в строку с символами новой строки.

Это случай #pylint: ignore-msg=E1103 или лучше сообщить об этом разработчикам pylint?

+0

сделал вы пытаетесь установить 'pipeOpen. universal_newlines = true'? – Aprillion

+0

или '", ".join (errorData)' вместо 'strip', если это список вместо строки? – Aprillion

+0

@deathApril Да, это делается в Popen(). Будет ли обновлять пример кода, чтобы отразить наш рабочий код –

ответ

1

хорошо, если print(pipeOpen.universal_newlines and hasattr(file, 'newlines')) возвращается True, и вы не получите каких-либо ошибок, в то время как на самом деле работает код, то вы должны сообщить об этом pylint разработчиков + проигнорировать сообщение в то же время

+0

К сожалению нет python 3.x Застрял с ActiveState 2.7.2. Да, эта строка кода возвращает true в нашем случае. Думаю, я тоже сообщу об этом. Это кажется довольно уродливым, когда нужно использовать «pylint: ignore-msg =». Спасибо хоть :-) –

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