2

理解するのが難しいスタックトレースを取得しています:

screwed_up_code.py in atleast_4d(arr)
     28 def atleast_4d(arr):
     29     stshape = arr.shape
     30     while len(stshape)<4: stshape+=(1,)
     31     print arr.shape, stshape
---> 32     return arr.reshape(stshape)

/usr/lib/python2.7/dist-packages/numpy/core/memmap.pyc in __array_finalize__(self, obj)
    255         if hasattr(obj, '_mmap'):
    256             self._mmap = obj._mmap
--> 257             self.filename = obj.filename
    258             self.offset = obj.offset
    259             self.mode = obj.mode

AttributeError: 'memmap' object has no attribute 'filename'

疑問に思った場合arr.shape = (192, 384, 6)stshape = (192, 384, 6, 1)


アップデート

NPE で示唆されているように、似たような AttributeError のバグ レポートを調べました。そこのポスターは、ndarray の酸洗いによって属性が失われたことを非難しました。私は確かに配列を酸洗いしており、ロードされた配列を次のように再活性化するとき:

newarr = numpy.ndarray(pickled_array)
pickled_array = newarr                  # use the recreated instead of the pickled arr

例外ではなく警告が表示され、コードが実行されます。

Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in  ignored
Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in  ignored
Exception AttributeError: AttributeError("'NoneType' object has no attribute 'tell'",) in <bound method memmap.__del__ of memmap([  85389.2734375,  125935.75     ,  173624.09375  ,  272958.78125  ,
        305687.65625  ,  433026.3125   ], dtype=float32)> ignored

私のコードが実行されたことに十分満足しており、しばらくはそのままにしておきます。

4

1 に答える 1

3

これは、このバグによく似ています。

そこのスタック トレースは少し異なりますが、コードはまったく同じ例外でまったく同じ時点で失敗します。

 File "C:\Python26\Lib\site-packages\numpy\core\memmap.py", line 257, in __array_finalize__
   self.filename = obj.filename
AttributeError: 'memmap' object has no attribute 'filename'

これが最初に報告されたスレッドは、この問題がオブジェクトの酸洗に関係するこの別のチケットに関連している可能性があることを示唆しnumpy-discussionますmemmap。いずれにせよ、スレッドは読む価値があります。

于 2013-04-13T09:16:00.577 に答える