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 dannFalse
. 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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code, den Sie gebucht habe, nicht die Fehler, die Sie behaupten, es funktioniert. Jedoch mit der
global
Schlüsselwort außerhalb einer Funktion hat keine Wirkung, so ist es nicht verwunderlich, dass es nicht funktioniert, wie Sie erwarten.Ich gehe davon aus, dass in Ihrem code, Sie sind wirklich versucht zu vergeben, um
haveamessage
innenon_message
. Wenn ja, müssen Sie eineglobal
- Anweisung innerhalb der Methode.Grundsätzlich die Regel ist: Wenn Sie versuchen, weisen eine Globale variable innerhalb einer Funktion, die Sie verwenden müssen, die
global
- Schlüsselwort in der Funktion ist. Ansonsten brauchen Sie nicht dieglobal
Schlüsselwort überhaupt. Ob oder nicht die variable ist ein boolescher Wert, macht keinen Unterschied.Ich glauben, was Sie wollen zu tun ist, definieren Sie die globalen Variablen, aber dann in Ihrer Funktion zu referenzieren, so dass Sie Sie verwenden können lokal:
global
beim Lesen Globale Variablen nur dann, wenn Sie Sie.