2014-10-28 68 views
4

我從其他人的python模塊引發異常(AttributeError: 'NoneType' object has no attribute 'append')的代碼片段。該片段是:聲明的列表引發NoneType異常

def generateFragments(self): 
    tr = self.deviceTransform() 
    if tr is None: 
     return 
    pts = np.empty((2,len(self.data['x']))) 
    pts[0] = self.data['x'] 
    pts[1] = self.data['y'] 
    pts = fn.transformCoordinates(tr, pts) 
    self.fragments = [] 
    pts = np.clip(pts, -2**30, 2**30) ## prevent Qt segmentation fault. 
             ## Still won't be able to render correctly, though. 
    for i in xrange(len(self.data)): 
     rec = self.data[i] 
     pos = QtCore.QPointF(pts[0,i], pts[1,i]) 
     x,y,w,h = rec['fragCoords'] 
     rect = QtCore.QRectF(y, x, h, w) 
     self.fragments.append(QtGui.QPainter.PixmapFragment.create(pos, rect)) 

和異常消息是:

[14:35:59] Ignored exception: 

    |==============================>> 
    | Traceback (most recent call last): 
    | File "/usr/lib/pymodules/python2.7/pyqtgraph/debug.py", line 35, in w 
    |  func(*args, **kwds) 
    | File "/usr/lib/pymodules/python2.7/pyqtgraph/graphicsItems/ScatterPlotItem.py", line 714, in paint 
    |  self.generateFragments() 
    | File "/usr/lib/pymodules/python2.7/pyqtgraph/graphicsItems/ScatterPlotItem.py", line 685, in generateFragments 
    |  self.fragments.append(QtGui.QPainter.PixmapFragment.create(pos, rect)) 
    | AttributeError: 'NoneType' object has no attribute 'append' 
    | 
    |==============================<< 

這不是一個「修復我的錯誤」的問題,而是「這怎麼可能」的問題。上面的幾行,self.fragments被聲明爲空列表。從那時起,self.fragments的唯一修改是致電append()。這種類型怎麼可能改變?追加操作中是否有可能會將列表類型更改爲NoneType

+0

'self.data'屬性?如果是這樣,那麼可以在該函數中設置'self.fragments'爲'None'。我沒有看到任何可能導致問題的事情。 – 2014-10-28 05:05:17

+0

是的,'self.data'是一個'numpy'數組 – 2014-10-28 05:14:34

+0

第一次迭代是否發生異常? – 2014-10-28 05:18:44

回答

0

的兩種可能性來我的腦海中:

  • 併發(按@ ekhumoro的評論)。
  • 這個類定義了一個__getattribute__方法,它將通常的屬性檢索機制短路。