2013-03-18 47 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:是。

相关问题