簡體   English   中英

Python 2.7 tempfile.NamedTemporaryFile返回類型為“實例”而不是“文件”的對象。 為什么?

[英]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語句中使用該文件狀對象。

看一下實現TemporaryFileNamedTemporaryFile實際上都是工廠函數。 根據操作系統的不同, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM