Dauert genau 1 argument (0 given)

Ich habe den folgenden code. Ich bin versucht, die tick-Funktion zu tun, einen countdown in einer twisted-Buchse. Es sagt mir tick() takes exactly 1 argument (0 given). Was kann ich tun?

Dank.

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:

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
  • Bitte die komplette Fehlermeldung mit der vollen traceback.
  • was passiert, wenn Sie ändern: reactor.callLater(1, tick) zu reactor.callLater(1, self.tick)?
  • Traceback (most recent call last): File "/Users/Alec/Desktop/server.py", line 163, in <module> - Klasse-Buchse(Protokoll): File "/Users/Alec/Desktop/server.py", line 171, in Sockel-Reaktor.callLater(1, self.ankreuzen) NameError: name 'self' ist nicht definiert
  • Ich meinte die Funktion tick -- self ist klar definiert (es übergeben als argument).
  • Also def tick(self):?
  • Ich war im Grunde immer auf die gleiche Sache, die Jeff geschrieben als Antwort ...
  • Warte eine Sekunde. Ihre Frage, die Titel und Ihre Frage zu Frage unterscheiden. Von der ursprünglichen Frage, die Antwort wurde bereits zur Verfügung gestellt.
  • Ja, es war.
  • Hmm, das fehlen der self. Teil in der reactor.callLater(1, self.tick) ergab eine andere Fehlermeldung, als ich erwartet hatte. NameError: global name 'tick' is not defined. Ich habe das Gefühl, dass die Namen tick und self sind definiert in den globalen namespace oder so etwas in der Art ist messing Dinge...
  • Kannst du das erklären?
  • Sind Sie sicher, dies ist Ihr code? Ich sehe keinen Weg, dass self wäre nicht hier definiert. Wenn das wirklich so ist dein code, versuchen Sie, mit python -tt zu überprüfen, dass Sie nicht die Vermischung von Tabulatoren und Leerzeichen. Ich nehme an, das könnte führen zu einige funky Ergebnisse...
  • Naja, der ursprüngliche Fehler (mit der self. Teil weggelassen) sollte eine NameError da innerhalb einer Klassendefinition, die Funktionsnamen sind nicht im Lieferumfang, es sei denn, qualifiziert durch die self argument. Da Sie nicht bekommen, dass Fehler, die Namen tick muss existiert haben, in den globalen Namensraum erlaubt Ihnen, den Anruf zu tätigen. Es gibt einige Dinge, die Sie nicht zeigen, Sie uns Ihre (vollständige) code, der betroffen ist, alles. Dies ist einer der Gründe, warum Sie sollten nicht mischen globals in Ihre Instanz-Methoden.
  • Ich schwöre, das ist mein code. Datei "/Users/Alec/Desktop/server.py", line 168, wenn expire == 0: ^ TabError: die inkonsistente Verwendung von Tabulatoren und Leerzeichen bei der Einrückung
  • Ich war nach diesem, so don ' T lassen uns hängen, hab das löst das ursprüngliche problem? 🙂
  • ES FUNKTIONIERT!!!!!!!! VIELEN DANK JUNGS!!! "Abgelaufen" zeigte sich 10 Sekunden später! 😀
  • Interessant... obwohl ich habe gelernt zu lieben, Python, ich sehen, warum gibt es Programmierer, die nicht wie die Probleme, die white-space-Themen bringen kann w/ Python.
  • AlecK, vielleicht entweder du oder @mgilson fallen sollten Sie eine schnelle Antwort auf diese und dann sollten Sie es überprüfen? Es würde daran erinnern, noobs, das stolpern über diesen zu prüfen, Leerzeichen Probleme.
  • OK, ich werde. 🙂
  • Ich bin froh, Sie haben es gelöst 🙂
  • Ich glaube, es ist whython für die Herstellung von whitespace, weniger bedeutsam. Es wurde geschrieben als ein Witz, aber ich bin mir ziemlich sicher, dass es tatsächlich funktioniert.
  • Ha! Der Abschnitt 'Warum Whython' ist auch lustig! Ich verbrachte 5 Jahre in Perl also ich kann Mitfühlen w/ diejenigen, die sich ernsthaft argumentieren gegen Leerzeichen getrennte code. Aber ich habe gelernt, wo ich es jetzt mag und wenn ich etwas tun müssen, das in Perl, alle diejenigen, die geschweiften Klammern und Semikolons unnötig! 😉
  • erzwungene Leerzeichen sind eigentlich die design-Entscheidung von python, die ich am meisten hasse. Es ist nicht so, dass ich nicht mag whitespace. In der Tat, ich werde Einrücken, egal was. Allerdings habe ich Probleme mit den Editoren nicht in der Lage, intelligent zu re-Einzug eine region-code, wenn Sie über ein umgestalten. Dies kann lästig sein, und letztlich fehleranfällig.

InformationsquelleAutor Alec | 2013-03-18
Schreibe einen Kommentar