2012-03-09 91 views
2

按照我刚才的问题("Pylint E0202 False Positive?")这里是另一个(非常具体的我猜的)Pylint E1103假阳性?

我们正在使用的模块子进程来执行,那么,子进程。
创建的示例代码导致以下:

"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:的 '列表' 实例没有 '条' 构件(但某些类型的无法推断)

寻找到pipeOpen.communicate()它下降到_communicate。事实上,stderr被初始化为一个列表,但是,在返回之前,如果self.universal_newlines为true,那么它会将列表转换为带有换行符的字符串。

这是#pylint: ignore-msg=E1103或更好的报告给pylint开发者的案例吗?

+0

确实忽略该消息您尝试设置'pipeOpen。 universal_newlines = true'? – Aprillion 2012-03-09 10:08:29

+0

或'',“.join(errorData)'而不是'strip'如果它是一个列表而不是一个字符串? – Aprillion 2012-03-09 10:21:41

+0

@deathApril是的,这是在Popen()中完成的。将更新代码示例以反映我们的工作代码 – 2012-03-09 11:18:00

回答

1

好,如果print(pipeOpen.universal_newlines and hasattr(file, 'newlines'))回报True同时实际运行的代码,你没有得到任何错误,那么你应该报告给开发商pylint的在+同时

+0

可悲的是没有python 3.x与ActiveState 2.7.2卡住。是的,这一行代码在我们的案例中返回true。猜猜我会报告它。不得不使用'pylint:ignore-msg ='来感觉非常难看。谢谢,虽然:-) – 2012-03-09 17:55:36