Warum tut sich globalisierenden ein boolean nicht arbeiten, sondern sich globalisierenden ein Wörterbuch funktioniert

Dies ist nur eine Frage, Frage mich, warum das nicht funktioniert. Ich habe herausgefunden, Sie einen besseren Weg, aber ich weiß nicht, warum es vorher nicht funktionierte.

global mydict
mydict = {}

Dieser scheint gut zu funktionieren, und hat den mydict Wörterbuch-global. Ich habe sogar print mydict und es funktioniert. Jedoch wird dies:

global bool
bool = False

Scheint nicht zu funktionieren. Wenn Sie versuchen, zu drucken bool in meinem code, den ich bekommen:

UnboundLocalError: local variable 'bool' referenced before assignment

Also warum macht es die Arbeit für das Wörterbuch ein und nicht den booleschen?

Oh, also, wenn jemand fragte mich, wie ich herausgefunden habe, eine bessere Art und Weise, die ich initialisiert eine Klasse und machte bool global in der Klasse zu tun: selbst.bool = False, was auch geklappt hat. Ich habe es von dieser Frage: Alle Variablen global


EDIT: Wie gewünscht, poste ich den notwendigen code:

import chatbot
global mydict
mydict = {}
global haveamessage
haveamessage = False

class MyBot(chatbot.ChatBot):
    def __init__(self, username, password, site):
        chatbot.ChatBot.__init__(self,username,password,site)

    def on_message(self, c, e):
        print mydict
        print haveamessage

if __name__ == '__main__':
    bot = MyBot("MyUsername", "MyPassword", "MySite")
    bot.start()

Ich werde versuchen, erklären Sie diesen code. So ziemlich das chatbot-Modul können Benutzer zum erstellen von bots in wikis auf Wikia, ein Unternehmen, das können wikis erstellt werden, die jeder Bearbeiten kann. In einem wiki gibt es einen chat-Verlängerung, wo Benutzer sprechen kann. Dieses Skript ermöglicht eine bot-beitreten der chat-und-tun-Befehle. on_message() erlischt, wenn jemand Beiträge etwas in den Chat.

Also diese Drucke:

{}
Traceback (most recent call last):
  File "file.py", line 146, in <module>
    bot.start()
  File "/Library/Python/2.7/site-packages/chatbot.py", line 371, in start
    self.on_message(self.c, e)
  File "file.py", line 12, in on_message
    print haveamessage
UnboundLocalError: local variable 'haveamessage' referenced before assignment

Möchte ich klarstellen, dass der Grund, warum dies nicht ein Fehler erzeugt für alle von Ihnen ist, weil Sie nicht in einem Wikia-chat. die Funktion on_message() nur ausgeführt wird, wenn jemand Beiträge etwas in den Chat. Zum Beispiel, ich mag:

def on_message(self, c, e):
    if e.text == 'hello': # e.text is what a user posts in the chat. e = event
        c.send('Hello!') # c.send simply sends back a message in the chat. c = connection

Also, wenn jemand Beiträge in chat-Hallo, der Bot Beiträge zurück Hallo!

  • Bitte schreiben Sie einen kleinen, lauffähigen Codebeispiel, das das problem reproduziert.
  • Wenn ich mit diesem code, bekomme ich eine import-Fehler. Nach dem modifizieren der code um den Fehler zu entfernen, passiert nichts. Nach dem hinzufügen von code zu instanziieren MyBot - und call - on_message es auf, druckt es {} und dann False. Die Fehlermeldung, die Sie behaupten zu sein, immer tritt nie ein.
  • Ich habe in meinem code und auch der Fehler kommt.
  • Ja, das Modul chatbot ist meine Freunde. Es ist einfach etwas, an dem ich arbeite.
  • Mein Punkt war, dass ein Stück code nicht qualifizieren sich als "runnable" wenn ich Dateien, die ich nicht haben, um zu laufen. Aber der wichtigere Punkt war, dass der code, den Sie bereitgestellt haben, nicht tatsächlich den Fehler verursachen, du fragst nach. Also im Grunde hast du uns verlassen, um zu erraten, was Ihre eigentliche code aussieht und das ist einfach nur unhöflich.
  • Sorry, ich werde versuchen, erweitern Sie den code. Ich bin noch Recht neu bei stack overflow.
  • Erweitertes code immer noch nicht produzieren Ihre angeblichen Fehler. Das nächste mal, bevor du postest code solltest du eigentlich laufen, dass der code (und damit meine ich die tatsächlichen Sie den post - nicht den größeren code, den Sie haben, lokal) und sicherzustellen, dass es produziert den Fehler, den du Fragen.
  • Der Grund, es ist nicht ein Fehler erzeugt für Sie ist, weil Sie nicht in einer Wikia-chat. Die Funktion nur aufruft, wenn eine Nachricht im chat, und wenn jemand eine Nachricht hinterlässt, wird die Funktion ausgeführt, und der Fehler erscheint
  • Sind Sie behaupten, dass Sie tatsächlich führen Sie den genauen code, den Sie gepostet habe und, dass es zu produzieren ein UnboundLocalError für Sie?
  • Ja, ich weiß nicht, warum
  • Okay, dann tut es mir Leid, aber du bist ein Lügner. Dieser code wird nie zu, dass Fehler und das hat nichts damit zu tun, dass Ihr nicht in einem chat. Würde man nur bekommen, dass der Fehler, wenn die Funktion enthalten ist eine Zuweisung, die in deinem geposteten code nicht.
  • Ah, habe ich es herausgefunden. Ich war nicht up-to-date mit meinem Freund chatbot-Modul, und das ist, was hatte der den Fehler verursacht hat. Tut mir Leid, dass

InformationsquelleAutor TerryA | 2013-01-20
Schreibe einen Kommentar