首先,我想說,我剛剛開始使用Python和扭曲,所以即使在搜索我所有的錯誤和疑惑,我確信我仍然可以製作一些愚蠢的。exceptions.AttributeError:EchoFactory實例沒有屬性'連接'
說,我正在處理這個客戶端 - 服務器對,客戶端將模擬一個偵聽循環來知道設備是否連接到它,然後用它的參數向服務器發送消息。
首先我創建連接,然後啓動循環,然後在設備連接後發送文件(您會在代碼的底部看到該註釋)。現在我想要做的是在設備連接到客戶端時(在LoopingCall調用的函數內部)創建連接,並且因爲它引發了您在標題中看到的異常而出現問題。
這是客戶端代碼,這是給我麻煩的。
from twisted.internet import reactor, protocol
from twisted.internet.task import LoopingCall
import gri
import os
ID = '1258'
filename = 'parameters.xml'
a = 1;
reg = 0;
xreg = 0;
xdreg = 0;
#Create the radio object
radio = gri.Radio()
class EchoClient(protocol.Protocol):
def connectionMade(self):
self.transport.write(ID)
def sendXML(self):
f = open(filename,'r')
self.transport.write(f.read())
f.close()
class EchoFactory(protocol.ClientFactory):
def buildProtocol(self, addr):
self.connection = EchoClient()
return self.connection
def clientConnectionFailed(self, connector, reason):
print "Connection failed."
reactor.stop()
def clientConnectionLost(self, connector, reason):
print "Connection lost."
reactor.stop()
#listening loop
def find_usrp():
global a
global reg
global xreg
global xdreg
global factory
# a=0 if the device is connected, a=1 if not
a = radio.findRadio()
if a == 0:
reg = 1
if xreg == 0:
#creating the connection once the device is connected
factory = EchoFactory()
reactor.connectTCP("localhost",8000, factory)
factory.connection.sendXML()
xreg = 1
xdreg = 0
else:
print "Device is not connected"
if reg == 1:
print "Device is out"
if xdreg == 0:
xdreg = 1
xreg = 0
#creating the connection before the loop
#factory = EchoFactory()
#reactor.connectTCP("localhost",8000, factory)
LoopingCall(find_usrp).start(1, now = False)
reactor.run()
所以就這樣,我不知道爲什麼當它進入factory.connection.sendXML()它沒有找到連接。我一直在嘗試不同的東西,比如將工廠作爲參數傳遞給find_usrp函數,改變位置的東西,但是恐怕我沒有足夠的知識來了解這種語言是怎麼回事......讓我們來看看你是否可以幫助我,所以我可以真正瞭解它。謝謝!
編輯:
到目前爲止eighilaza說什麼道理給我,我已經試過後跑這條線 factory.connection.sendXML()
一段時間,似乎它的工作原理,所以也許我想在創建之前運行此功能。但是有什麼辦法可以控制這個嗎?
歡迎來到SO:SE。你是什麼意思*它沒有找到連接*?是否有一些錯誤信息可以幫助解答? – mins 2015-04-03 17:36:13
謝謝!錯誤消息是在標題中出現的錯誤信息:「exceptions.AttributeError:EchoFactory實例沒有屬性'connection'」,當代碼在find_usrp函數內部達到「factory.connection.sendXML()」時被拋出 – josepmeg 2015-04-03 20:24:27