' NoneType'对象没有属性'显示'

时间:2016-04-23 12:07:40

标签: python

我试图从类方法传递从ImageGrab中获取的图像。但它返回None。 takeSS()内的im.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'

1 个答案:

答案 0 :(得分: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时,相同的块将无法运行。