15

我正在从 Python 2.7 移植到 Python 3.3.2。在 Python 2.7 中,我曾经能够做类似的事情assert(type(something) == file),但在 Python 3.3.2 中似乎这是错误的。我如何在 Python 3.3.2 中做类似的事情?

4

1 回答 1

28

Python 3 文件对象是模块的一部分,针对该io模块中的ABC 类进行测试:

from io import IOBase

if isinstance(someobj, IOBase):

不要type(obj) == file在 Python 2 中使用;你会isinstance(obj, file)改用。即使这样,您也想测试这些功能ioABC让你做的事情;该isinstance()函数True将为实现抽象基类定义的所有方法的任何对象返回。

演示:

>>> from io import IOBase
>>> fh = open('/tmp/demo', 'w')
>>> isinstance(fh, IOBase)
True
>>> isinstance(object(), IOBase)
False
于 2013-09-18T19:44:25.507 回答