fromfile
無効なデータであり、ファイルの終わりを超えて読み取る場合はセグメンテーション違反が発生する場合があります。つまり、読み取りがファイルの終わりを超えるかどうかはチェックされません。 この問題により、Ubuntu 16.04ではセグメンテーション違反が発生しますが、OSXではセグメンテーション違反ではないようです。
import numpy as np
def test_read_from_file():
# create an empty file named `empty.bin`
filename = 'empty.bin'
open(filename, 'a').close()
# read large chunk of data, past the end of the file
dtype = [('data', '<f4', 500,)]
count = 100000000
with open(filename, 'rb') as fh:
data = np.fromfile(fh, dtype, count)
print(data.shape)
プロセスは終了コード139で終了しました(シグナル11:SIGSEGVによって中断されました)
プラットフォームlinux-Python3.6.6、pytest-3.8.2、py-1.6.0、pluggy-0.7.1
ちなみに、1.15.3で再現可能です。 サイズはわかっていると思うので、エラーが発生するか、ファイル全体を読み取る必要があります。 これが一部のシステムでサイレントに機能する場合は、万が一の場合に備えてリリースノートを作成する必要があります(それでも修正できると思います)。
編集:私はエラーを起こす傾向があります。インデックス付けのためにファイル全体がオプションである可能性があると思っただけですが、インデックス付けはこの点で少し特別です。
同意しました。エラーを発生させるのは良い考えのように思えます。 部分的な読み取りについては、まだ2つの方法で処理できます。
count
にfromfile
まで、できるだけ多くのデータレコードを読み取りますが、実際に読み取られたレコードの数を明示的に返すメカニズムが必要です(暗黙的に)これは、結果の配列の形で表示されるはずです)。 通常の使用シナリオではないため、エラーが発生する可能性があります。どのシナリオがNumpyの哲学に適しているかはわかりませんが、最初のオプションの方が便利に聞こえます。
エラーが最も合理的だと思います。 私が今確信していないのは、fromfileが既知のサイズを持たないオブジェクトのようなファイルをサポートしているかどうか、または空でないsepkwargの場合に現在何が起こっているかです。
@amuresan fromfileのコードはCですが、少し時間があれば、プルリクエストには常に満足しており、C(Python)APIに少し手を加えるのはかなり難しいようです。
ここでの問題は、実際にはubuntuでMemoryError
が誤って処理され、セグメンテーション違反が発生していることだと思います。
修正されたPRはここにあります: https :
最も参考になるコメント
ここでの問題は、実際にはubuntuで
MemoryError
が誤って処理され、セグメンテーション違反が発生していることだと思います。修正されたPRはここにあります: https :