我正试图通过一个模拟的错误,我一直得到以下错误:
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。这样的函数存在于fromfilefromfilenumpy,但没有一个像上面列出的那样引起错误。
如能澄清上述问题,我们将不胜感激。顺便说一下,我使用的是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/

10-09 02:29