我试图向numpy.fromfile传递一个模拟的file,并且一直收到以下错误:
IOError:!第一个参数必须是打开的文件
下面是一个基本示例,使用取自模拟包的mock_open部分的进一步的例子:
import numpy as np
from mock import MagicMock, patch
file_spec = file
def mock_open(mock=None, data=None):
if mock is None:
mock = MagicMock(spec=file_spec)
handle = MagicMock(spec=file_spec)
handle.write.return_value = None
if data is None:
handle.__enter__.return_value = handle
else:
handle.__enter__.return_value = data
mock.return_value = handle
return mock
if __name__ == "__main__":
m = mock_open()
with patch('__main__.open', m, create=True):
with open('foo', 'rb') as h:
print h.mock_calls
try:
result = np.fromfile(h)
except IOError:
print "io error!"
print h.mock_calls其结果是:
% [call.__enter__()]
% io error!
% [call.__enter__()]我可以嘲笑numpy.fromfile,这可能是我最后要做的。我很难理解下面的内容
fromfile (在fromfile之前调用pdb.set_trace()并进入fromfile )。不管发生什么,调试器似乎都会跳过调用。fromfile源代码中找到numpy。这样的函数存在于numpy/numarray/functions.py、numpy/core/records.py和numpy/ma/core.py中,但是这些函数都不会像上面列出的那样引发错误。如有任何帮助澄清上述问题,我们将不胜感激。顺便说一下,我使用的是numpy版本1.6.1。
发布于 2012-06-18 19:01:01
我不知道为什么您的模拟open()不能工作,但是由于您正在立即调用您自己的模拟,所以您有一个更简单的选项:使用StringIO创建一个文件,并将其交给numpy.fromfile。
问题2和问题3可能是因为numpy.fromfile是用C语言编写的。
https://stackoverflow.com/questions/11088644
复制相似问题