我正在尝试传递numpy.fromfile
一个模拟的file
,并且我一直收到以下错误:
IOError:!第一个参数必须是一个打开的文件
这是一个基本的例子,使用mock_open
取自模拟包的Further Example部分:
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
时遇到问题(在pdb.set_trace()
之前调用fromfile
并进入fromfile
。无论如何,调试器似乎都会跳过调用。< / LI>
fromfile
源代码中找不到numpy
。这样的函数存在于numpy/numarray/functions.py
,numpy/core/records.py
和numpy/ma/core.py
中,但这些函数都没有像上面列出的那样引发错误。 非常感谢任何澄清上述问题的帮助。我顺便使用numpy
版本1.6.1。
答案 0 :(得分:1)
我不确定为什么你的模拟open()不起作用,但是因为你立即调用自己的模拟,你有一个更简单的选择:用StringIO
创建一个文件,并且把它交给numpy.fromfile。
问题2和问题3可能是由于numpy.fromfile是用C语言编写的。