3

numpy.fromfilemockedを渡そうとしfileていますが、次のエラーが発生し続けます。

IOError: !最初の引数は開いているファイルでなければなりません

これは、mock パッケージの「追加の例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. デバッグに問題があるのはなぜですかfromfilepdb.set_trace()直前に呼び出してにステップfromfileインすることによりfromfile。デバッガーは何があっても呼び出しをステップオーバーするようです
  3. ソースコードfromfileで見つからない理由。numpyそのような関数は 、numpy/numarray/functions.pynumpy/core/records.pyおよびnumpy/ma/core.pyにありますが、上記のようなエラーは発生しません。

上記の問題を明確にする助けをいただければ幸いです。numpyちなみにバージョン1.6.1を使っています。

4

1 に答える 1

1

モック化された open() が機能しない理由はわかりませんが、すぐに独自のモックを呼び出しているため、より簡単なオプションがあります: でファイルを作成しStringIO、それを numpy.fromfile に渡します。

質問 2 と 3 は、おそらく numpy.fromfile が C で記述されているためです。

于 2012-06-18T19:01:01.797 に答える