RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Hallo,
Immer wenn ich folgenden Block ausführe

Code: Alles auswählen

msg_id = await self.channel.fetch_message(MESSAGEID)
Erhalte ich foglende Warnung:

Code: Alles auswählen

/home/phobit/PycharmProjects/DiscordSippenBot/Main.py:160: RuntimeWarning: coroutine 'Messageable.fetch_message' was never awaited
  msg_id = await self.channel.fetch_message(MESSAGEID)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Die Funktion ist mit async geschrieben, und das await hab ich ja auch verwendet, woher kommt nun die Runtime Warning? (und, nebenbei, gibt es eine Möglichkeit diese Runtime Warnings zu unterdrücken? mit try/except scheint es ned zu klappen)
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Sirius3
User
Beiträge: 18216
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie sieht denn der gesamte Code aus?
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Der ganze Code ist gute 1.000 Zeilen lang. Reicht dir vllt ein bestimmter ausschnitt? Will ungern alles posten...
Das wäre mal die gesamte Funktion mit der Codezeile:

Code: Alles auswählen

    async def on_ready(self):
        if self.ready is False:
            try:
                self.logging("sys", "syslog.txt", "Starting...")
                id_init = self.init_ids()
                if id_init is True:
                    self.stat_embed_id = await self.server_statistiken.fetch_message(736979692913164289)
                    self.logging("sys", "syslog.txt", "Initializing IDs.....Done")
                    await self.server_logging("sys", "Initializing IDs......Done")
                else:
                    self.logging("sys", "syslog.txt", "Initializing IDs....Error")
                task_init = self.task_handler()
                if task_init is True:
                    self.logging("sys", "syslog.txt", "Initializing tasks...Done")
                    await self.server_logging("sys", "Initializing tasks...Done")
                else:
                    self.logging("sys", "syslog.txt", "Initializing tasks..Error")
                    await self.server_logging("sys", "Initializing tasks..Error")
                print("Bot ready")
                self.logging("sys", "syslog.txt", "Bot started succesfully!\n")
                await self.server_logging("sys", "Bot started succesfully!")
            except Exception as e:
                self.logging("sys", "errorlog.txt", "Bot could not be started!")
                self.logging("sys", "errorlog.txt", "Error:%s\n" % e)
                await self.server_logging("sys", "Startup failed.")
                await self.server_logging("error", "Bot failed, Error:%s" % e)
            self.ready = True
        else:
            self.logging("sys", "syslog.txt", "on_ready was called!\n")
            self.ready = True
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Benutzeravatar
sparrow
User
Beiträge: 4503
Registriert: Freitag 17. April 2009, 10:28

@Phobit: Ich weiß ja nicht, wo du da die Codezeile aus dem ersten Post bzw. aus der Fehlermeldung da siehst - ich sehe sie nicht....
Reduzier das Programm so weit, dass der Fehler repruduzierbar ist und poste dann das Beispielprogramm.
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

Ok, here it comes:

Code: Alles auswählen

    async def on_ready(self):
        """Called when the client is done preparing the data received from Discord. Initiates IDs and Tasks."""
            id_init = self.init_ids()
            if id_init is True:
                self.stat_embed_id = await self.server_statistiken.fetch_message(736979692913199999)
Der erwähnte init_ids:

Code: Alles auswählen

def init_ids(self):
        """Initiates IDs that have to be fetched after the bot has started."""
        try:
            self.server_statistiken = self.get_channel(736978976643219999)
        except Exception:
            return False
        else:
            return True
Müsste alles sein. Die IDs/ints sind IDs der verschiedenen DiscordChannels. Den init_ids brauche ich um mehrere/alle Channels zu "getten", der im on_ready erwähnte Problemmacher self.stat_embed_id ist eine Ausnahme, weil der in einer async-Funktion stehen muss wegen dem await.
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
Antworten