我正试图通过一个模拟的错误,我一直得到以下错误:
IOError:!第一个参数必须是打开的文件
下面是一个基本示例,使用取自模拟包Further Example部分的numpy.fromfile
:
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__()]
我可以模仿一下,这可能就是我最终要做的。我很难理解
为什么上面的例子不起作用
为什么调试
file
有困难(在mock_open
之前调用numpy.fromfile
并进入fromfile
。不管怎样,调试器似乎都会跳过调用。为什么我在
pdb.set_trace()
源代码中找不到fromfile
。这样的函数存在于fromfile
,fromfile
和numpy
,但没有一个像上面列出的那样引起错误。如能澄清上述问题,我们将不胜感激。顺便说一下,我使用的是
numpy/numarray/functions.py
版本1.6.1。 最佳答案
我不知道为什么mocked open()不起作用,但是由于您正在立即调用自己的mock,所以有一个更简单的选项:创建一个StringIO
文件,并将其交给numpy.fromfile。
问题2和3可能是由于numpy.fromfile是用C编写的。
关于python - 如何模拟numpy.fromfile?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11088644/