是否有与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兼容?
答案 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
如果需要,您可以添加一些其他错误处理程序,但应该这样做。