检查对象是否是Python 2和3中的文件

时间:2017-11-27 19:47:47

标签: python python-3.x python-2.7 compatibility

是否有与Python 2/3兼容的方法来检查对象是否是文件?

我需要检查对象filehandler是否实际上是file个对象。这段代码需要在Python 2和3中运行。在Python 2中,我可以做到

isinstance(filehandler, file)

但是file is not part of Python 3,因此在使用Python 3运行时,此代码会引发NameError

根据this answer,在Python 3中io.IOBase应该用于检查对象是否是文件,但Python 2的file不是io.IOBase的子类,所以isinstance(filehandler, io.IOBase)无效。

我考虑过做isinstance(filehandler, (io.IOBase, file)),但是当我使用Python 3运行它时仍然会给出NameError

有没有办法与Python 2.7和3兼容?

2 个答案:

答案 0 :(得分:0)

这是我使用的解决方法:在.py文件的顶部,我添加了:

import sys

if sys.version_info[0] == 3:
    from io import IOBase
    file = IOBase

因此,如果使用Python 3,请将file设置为IOBase。现在isinstance(filehandler, file)将在Python 3中正常工作,而对于Python 2,它将像往常一样工作。

当然,这个解决方案是非常hackish和混乱,因为它使IOBase看起来像file的Python 3版本,但事实并非如此。但它确实解决了这个问题。

答案 1 :(得分:-1)

为什么不做这样的事呢

try:
    #check in py3
except:
    #check in py2

如果需要,您可以添加一些其他错误处理程序,但应该这样做。