AttributeError:'NoneType'对象没有属性'connectSSL'

时间:2012-05-22 13:06:58

标签: python ssl openssl twisted pyqt4

我正在编写一个ssl客户端到我的服务器,它使用python与pyqt4扭曲,我在PYQT中使用QTReactor扭曲但是当我运行代码时出现错误

AttributeError: 'NoneType' object has no attribute 'connectSSL'

我的初始代码就像这样

from OpenSSL import SSL
import sys
from twisted.internet.protocol import ClientFactory
from twisted.protocols.basic import LineReceiver
from twisted.internet import ssl
import qt4reactor

app = QtGui.QApplication(sys.argv)
reactor=qt4reactor.install()
main()
myapp = MainForm()
myapp.show()
reactor.runReturn()
sys.exit(app.exec_())

def main():
    factory = ClientFactory()
    reactor.connectSSL('localhost', 8080, factory, ssl.ClientContextFactory())
    try:
        reactor.run()
    except KeyboardInterrupt:
        reactor.stop()

运行时的错误:

Traceback (most recent call last):
  File "client.py", line 51, in <module>
    main()
  File "client.py", line 40, in main
    reactor.connectSSL('localhost', 8080, factory, ssl.ClientContextFactory())
AttributeError: 'NoneType' object has no attribute 'connectSSL'

2 个答案:

答案 0 :(得分:6)

  

AttributeError:'NoneType'对象没有属性'connectSSL'

是您尝试在None上调用方法时收到的错误消息。

这行代码

reactor=qt4reactor.install()

是唯一分配reactor的地方。该错误消息清楚地表明reactor被赋值为None

我可以在该主题上找到的所有网络搜索点击都遵循以下模式:

qt4reactor.install(app)
from twisted.internet import reactor

所以我想这就是你的意思。但我确实承认对这些框架一无所知。

答案 1 :(得分:2)

qt4reactor.install()未返回值,因此reactor最终为None。因此,当您尝试调用reactor的方法时,您会收到此错误(显然,None没有任何方法)。如果我看得正确,获取reactor变量的正确方法是:

qt4reactor.install(app)
from twisted.internet import reactor