首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模仿numpy.fromfile?

如何模仿numpy.fromfile?
EN

Stack Overflow用户
提问于 2012-06-18 18:15:14
回答 1查看 1K关注 0票数 3

我试图向numpy.fromfile传递一个模拟的file,并且一直收到以下错误:

IOError:!第一个参数必须是打开的文件

下面是一个基本示例,使用取自模拟包的mock_open部分的进一步的例子

代码语言:javascript
复制
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

其结果是:

代码语言:javascript
复制
% [call.__enter__()] 
% io error!
% [call.__enter__()]

我可以嘲笑numpy.fromfile,这可能是我最后要做的。我很难理解下面的内容

  1. 为什么上面的示例不起作用
  2. 为什么我无法调试fromfile (在fromfile之前调用pdb.set_trace()并进入fromfile )。不管发生什么,调试器似乎都会跳过调用。
  3. 为什么我无法在fromfile源代码中找到numpy。这样的函数存在于numpy/numarray/functions.pynumpy/core/records.pynumpy/ma/core.py中,但是这些函数都不会像上面列出的那样引发错误。

如有任何帮助澄清上述问题,我们将不胜感激。顺便说一下,我使用的是numpy版本1.6.1。

EN

回答 1

Stack Overflow用户

发布于 2012-06-18 19:01:01

我不知道为什么您的模拟open()不能工作,但是由于您正在立即调用您自己的模拟,所以您有一个更简单的选项:使用StringIO创建一个文件,并将其交给numpy.fromfile。

问题2和问题3可能是因为numpy.fromfile是用C语言编写的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11088644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档