2016-04-23 8 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

*必ず**フル**トレースバックをエラーに含めてください。トレースバックからそれを確認するのではなく、例外をスローする* 2番目の 'img.show()'コールが*推測されなければなりません。 –

答えて

1

あなたはあなたの方法の真ん中にif __name__ == "__main__":ガードを持っています。それはです。そのテストのために非常に珍しい場所です。

このスクリプトをメインスクリプトとして実行しない限り、Manager.takeSS()メソッドは常にNoneを返し、エラーにつながります。

ifのテストを完全に削除します。これは、しかし、クラスの外の場所を有していてもよい: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() 

コードを使用すると、スクリプトとして、このモジュールを使用する場合にのみ実行し、今です。 import yourmoduleを使用すると、同じブロックが実行されません。

+0

それは動作します。私が__nameを__name __ == "__main__"と言ったら、私はいくつかの他のエラーが出ます。私はそれが別の時に正確に何かを掘り下げなければならないでしょう。しかし、この作品は、私は今後も続けます。どうもありがとう :) – SevenSoda

関連する問題