[英]Python 2.7 tempfile.NamedTemporaryFile returns object in type 'instance' not 'file'. Why?
一些庫檢查輸入f的類型是否為文件 。 Python 2.7庫tempfile返回類型文件中的對象
type(tempfile.TemporaryFile()) # type is file
而對於
type(tempfile.NamedTemporaryFile()) # type is instance
是出於某種原因還是僅僅是一個錯誤?
閱讀有關NamedTemporaryFile 的文檔 :
返回的對象始終是類似文件的對象,其
file
屬性是基礎真實文件對象。 就像普通文件一樣,可以在with
語句中使用該文件狀對象。
看一下實現 , TemporaryFile
和NamedTemporaryFile
實際上都是工廠函數。 根據操作系統的不同, TemporaryFile
可以簡單地返回一個低級文件句柄(在非posix兼容系統和cygwin上, TemporaryFile
為 NamedTemporaryFile
)。 NamedTemporaryFile
總是返回的實例_TemporaryFileWrapper
,這是一個舊式類(因此'instance'
,它包裝一個低級別的文件句柄)。
我不會說這是一個錯誤(盡管由於命名約定未遵循PEP8,所以可能是qwirky),因為一切都根據文檔進行操作-畢竟,返回的值類似於file 。
我對NamedTemporaryFile遇到的問題是pylint抱怨結果不是可迭代的。 可能這是pylint中的錯誤。
#!/usr/bin/python
'''
Test program for pylint complaint about file-like object returned from
tempfile functions.
'''
import tempfile
cmdOut = tempfile.NamedTemporaryFile(prefix="tmp-scc-cmd-stderr")
print "Return value from NamedTemporaryFile() is %s" % type(cmdOut)
print >>cmdOut, "foo\nbar" # send two lines of output
cmdOut.seek(0) # go back to beginning to read output
for line in cmdOut:
print line.rstrip()
報告的類型為“實例”。
% python ~/perl/tempfile-pylint.py
Return value from NamedTemporaryFile() is <type 'instance'>
foo
bar
但是pylint抱怨說
E: 14,12: Non-iterable value cmdOut is used in an iterating context (not-an-iterable)
我同意這不是tempfile中的錯誤,但在這種情況下確實會造成一些混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.