2016-04-23 51 views
1

我試圖從類方法傳遞ImageGrab中的圖像。但它返回None。 takeSS()中的im.show()起作用。'NoneType'對象沒有屬性'show'

import pyscreenshot as ImageGrab 

class Manager(): 
    def takeSS(self): 
     if __name__ == "__main__": 
      im = ImageGrab.grab(bbox=(0,0,1980,200)) 
      im.show() 
      return im 


m = Manager() 

img = m.takeSS() 
img.show() 

控制檯:

AttributeError: 'NoneType' object has no attribute 'show' 
+0

爲什麼在函數內部有if語句?它的計算結果爲false,因此該塊將不會執行並且無返回值。現在您嘗試在None上撥打節目,這是不可能的。 – Querenker

+0

請*,總是*包含您的錯誤**完整**回溯。我們現在必須猜測它是* second *'img.show()'調用拋出異常,而不是能夠從回溯中確認它。 –

回答

1

您的方法的中間if __name__ == "__main__":後衛。這是一個非常不尋常的地方該測試。

除非此腳本作爲主腳本運行,否則Manager.takeSS()方法將始終返回None,導致您的錯誤。

從中刪除if測試。它可以有地方外面雖然類

import pyscreenshot as ImageGrab 

class Manager(): 
    def takeSS(self): 
     im = ImageGrab.grab(bbox=(0,0,1980,200)) # X1,Y1,X2,Y2 
     im.show() 
     return im 

if __name__ == "__main__": 
    m = Manager()   
    img = m.takeSS() 
    img.show() 

if測試的代碼,如果你使用這個模塊作爲一個腳本,現在只運行。當您使用import yourmodule時,該塊不會運行。

+0

這是有效的。如果我拒絕__name __ ==「__main__」,我會得到一些其他錯誤。我將不得不深入探究它到底是什麼。但這項工作,所以我會繼續。非常感謝 :) – SevenSoda

相關問題