2016-04-16 5 views
1

Ich bekomme einen seltsamen AssertionError, wenn ich meinen Listener starte. Der if Teil der Logik in dieser Klasse arbeitet und ich nahm den verdrehten Code aus diesem Tutorial: http://krondo.com/our-eye-beams-begin-to-twist/Verdrehter Fehler beim Versuch, sich selbst anzurufen

class controlListener(object): 
     counter = 20 
     def count(self): 
      if self.counter == 0: 
       print "Killing Process" 
       reactor.stop() 
      else: 
       print self.counter, '...' 
       self.counter -= 1 
       reactor.callLater(1, self.counter) 

Der Fehler

--- <exception caught here> --- 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 429, in _continueFiring 
    callable(*args, **kwargs) 
    File "sponzyTwisted.py", line 17, in count 
reactor.callLater(1, self.counter) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/base.py", line 705, in callLater 
    assert callable(_f), "%s is not callable" % _f 
    exceptions.AssertionError: 19 is not callable 

Antwort

1

Sie sollen ein aufrufbare Objekt callLateras seen in the docs, zur Verfügung zu stellen und Sie liefern stattdessen Ihren einfachen Int counter. Sie sollten Ihre tatsächliche Methode count als aufrufbar sein vorbei, etwa so:

class controlListener(object): 
     counter = 20 
     def count(self): 
      if self.counter == 0: 
       print "Killing Process" 
       reactor.stop() 
      else: 
       print self.counter, '...' 
       self.counter -= 1 
       reactor.callLater(1, self.count) 
+0

Das ist genial es funktioniert, aber die controlListener tun Pass Priorität des printStuff Reaktor. Benutze ich den falschen Rückruf? ID wie Kontroll-Listener, um einen Bericht zu machen und dann an etwas anderes weiterzuleiten. Welchen Anruf sollte ich verwenden? –

+1

Der Rückruf scheint für mich korrekt zu sein, aber ich habe keine Erfahrung mit Twisted. Rufen Sie einfach 'reactor.callWhenRunning (controlListener(). Count)' auf – miradulo