2012-03-09 87 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