2012-10-13 19 views
0

無效語法我想建立一個UDP服務器扭folliowing這個http://twistedmatrix.com/documents/current/core/howto/udp.html的Python的高清

不過,我已經打了一個磚牆剛剛開始。我試過此示例代碼:

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor 

class Echo(DatagramProtocol): 

    def datagramReceived(self, data, (host, port)): 
     print "received %r from %s:%d" % (data, host, port) 
     self.transport.write(data, (host, port)) 

reactor.listenUDP(9999, Echo()) 
reactor.run() 

而且我得到這個:

def datagramReceived(self, data, (host, port)): 
           ^
SyntaxError: invalid syntax 

我是新來的Python,所以我無言以對。我將代碼剝離到了最低限度,除了類聲明和方法頭部(添加了一個通道)之外的所有內容都被註釋掉了,但我得到了相同的結果。那些配對參數不再被支持嗎?

+1

什麼您使用的是Python版本?另外,你確定沒有縮進錯誤嗎? – BrenBarn

+0

2.7,每個縮進有4個空格。 – broncoAbierto

+0

該語法在Python 3中已被刪除,但仍可在Python 2.7中使用。您是否確信:a)代碼是在Python 2.7中運行的(也就是說,您是否還安裝了可能正在運行的Python 3); b)您粘貼的代碼恰好是您正在運行的代碼? – BrenBarn

回答

3

你確定它是python 2.7。因爲PEP 3113 -- Removal of Tuple Parameter Unpacking描述了在Python 3中刪除該語法。作爲一個測試,當我在python 2.7中運行下面的虛擬函數時,它起作用。在Python 3.2它給了我你的確切同樣的錯誤:

def datagramReceived(self, data, (host, port)): 
    pass 

巨蟒-3錯誤:

def datagramReceived(self, data, (host, port)): 
            ^
SyntaxError: invalid syntax 

試試這個在您的代碼只是爲了確保你的Python版本:

import sys 
print(sys.version) 
+0

我認爲就是這樣。我曾告訴PyDev使用2.7語法,所以我認爲它會將其解釋爲2.7代碼。看起來我錯了。 – broncoAbierto