簡體   English   中英

如何模擬numpy.fromfile?

[英]How to mock numpy.fromfile?

我正在嘗試將numpy.fromfile傳遞numpy.fromfile一個numpy.fromfile file ,並且我一直收到以下錯誤:

IOError:!第一個參數必須是一個打開的文件

這是一個基本的例子,使用從mock包的Further Example部分獲取的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 ,這可能就是我最終要做的事情。 我無法理解后續內容

  1. 為什么上面的例子不起作用
  2. 為什么我有麻煩的調試fromfile (通過調用pdb.set_trace()之前fromfile和步入fromfile ,調試器似乎邁過呼叫不管。
  3. 為什么我在numpy源代碼中找不到fromfile 這樣的函數存在於numpy/numarray/functions.pynumpy/core/records.py numpy/ma/core.pynumpy/ma/core.py ,但是這些numpy/ma/core.py都不會像上面列出的那樣引發錯誤。

任何澄清上述問題的幫助都非常感謝。 順便說一句,我正在使用numpy版本1.6.1。

我不確定為什么你的模擬open()不起作用,但是因為你立即調用自己的mock,你有一個更簡單的選擇:用StringIO創建一個文件,並將其交給numpy.fromfile。

問題2和3可能是由於numpy.fromfile是用C語言編寫的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM