2013-03-18 90 views
-2

我有以下代碼。我正在嘗試使用滴答功能在扭曲的套接字中進行倒計時。它告訴我tick()只需要1個參數(0給定)。我該怎麼辦?完全參數1(0給出)

謝謝。

expire = 10 

class Socket(Protocol): 
    def tick(self): 
     global expire 

     expire -= 1 
     if expire == 0: 
      print "Expired" 
     else: 
      reactor.callLater(1, self.tick) 

    def connectionMade(self): 
     #self.transport.write("""connected""") 
     self.factory.clients.append(self) 
     print "Clients are ", self.factory.clients 

     if len(self.factory.clients) == 1: 
      reactor.callLater(0, self.tick) 

回溯:

Traceback (most recent call last): 
    File "/Users/Alec/Desktop/server.py", line 163, in <module> 
    class Socket(Protocol): 
    File "/Users/Alec/Desktop/server.py", line 171, in Socket 
    reactor.callLater(1, self.tick) 
NameError: name 'self' is not defined 
+1

請用完整回溯顯示完整的錯誤信息。 – BrenBarn 2013-03-18 03:29:37

+0

如果將'reactor.callLater(1,tick)'改爲'reactor.callLater(1,self.tick)',會發生什麼? – mgilson 2013-03-18 03:29:37

+0

@mgilson Traceback(最近調用最後一次): 文件「/Users/Alec/Desktop/server.py」,第163行,在 class Socket(協議): 文件「/ Users/Alec/Desktop/server。 py「,第171行,插座號 reactor.callLater(1,self.tick) NameError:name'self'未定義 – Alec 2013-03-18 03:31:29

回答

1

根據您的文章的標題和原代碼,我相信這個問題是在你的tick方法。你需要改變它,所以你通過self.tick,而不僅僅是tick

def tick(self): 
    global expire 

    expire -= 1 
    if expire == 0: 
     print "Expired" 
    else: 
     reactor.callLater(1, self.tick) # change here 

使用self.tick,你傳遞一個綁定的功能,從而隱含self參數已經包括在內。所以實際上,它是一個不需要參數的函數。沒有它,你會傳入需要參數的未綁定tick函數。

+0

當我把自己,我得到︰Traceback(最近調用最後):文件「/Users/Alec/Desktop/server.py」,行163,在類Socket(協議):文件「/用戶/亞歷克/桌面/server.py「,第171行,在Socket reactor.callLater(1,self.tick)NameError:name'self'沒有定義 – Alec 2013-03-18 03:33:42

+0

我也這麼認爲(起初),但是這應該會產生一個'NameError'點'reactor.callLater'(除非'tick'也是全局命名空間中定義的函數) – mgilson 2013-03-18 03:35:05

+0

@mgilson NameError:名稱'self'未定義 – Alec 2013-03-18 03:35:39

0

運行

python -tt file.py

後,事實證明我有空白的問題在那裏,如果過期== 0:是。

相關問題