[PYTHON] Was tun, wenn beim Versuch, eine Nachricht in task.loop () unmittelbar nach dem Start zu senden, eine Fehlermeldung angezeigt wird?

Vor kurzem wurde Misty krank, dass sie nicht zur Schule gehen will. In Vorheriger Artikel habe ich () die aktuelle Zeit und die geplante Übertragungszeit für das Debuggen gedruckt (), aber ich hatte die Idee "print (print on syslog (") ) Sende alles an Discord “und ändere es, aber es ist ein Fehler aufgetreten und ich hatte ungefähr zwei Tage lang Probleme. Ich möchte zu diesem Zeitpunkt die Bewältigungsmethode vorstellen.

Hauptthema

Code beim Auslösen eines Fehlers

bot.py


@tasks.loop(seconds=60)
async def loop():
    global time_set
    global tem_set

    w_list = ["Mond", "Feuer", "Wasser", "Holz", "Geld", "Boden", "Tag"]  #Es hat sich weiterentwickelt!
    now_t, now_dt = datetime.now().strftime('%H:%M'), w_list[datetime.now().weekday()]

    ch = client.get_channel(771155766056452167)
    await ch.send(f"Aktuelle Uhrzeit:`{now_t}`/ Der heutige Tag:`{now_dt}`/ Geplante Übertragungszeit:`{time_set}`/ Geplante Getriebekörpertemperatur:`{tem_set}`")

    if now_dt != "Tag":  # Tag曜Tag以外だったら送信するようにした
        if now_t == time_set:  #Ist es die geplante Übertragungszeit?
            dt_now = datetime.now().strftime("%Y-%m-%d")  #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern

            file_name = "cfg.json"
            with open(file_name, "r", encoding="utf-8")as f:
                cfg = json.load(f)
                cfg["output"]["ans_1"] = f"{dt_now}"
                cfg["output"]["ans_4"] = f"{tem_set}"

                params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
                res = requests.get(cfg["form_url"] + "formResponse", params=params)

            if res.status_code == 200:
                await template_embed(message=768274673984208926, title="Protokollinformationen", description=f"[URL]({res.url})",
                                     name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
            else:
                res.raise_for_status()
                await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
                                     value_1="Ein Fehler ist aufgetreten.", color=discord.Color.red())

        else:
            if now_t == "21:00":
                time_set = setting_time_set()
                tem_set = set_tem()
                await template_embed(message=768274673984208926, title="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                                     value_1=time_set, color=discord.Color.blue())

Wenn ich diesen Code tatsächlich ausführe, wird folgende Fehlermeldung angezeigt: Zuerst dachte ich, es sei ein Kopieren / Einfügen der ID, aber selbst wenn ich sie erneut kopierte, bekam ich einen Fehler. Vielleicht gibt es noch etwas anderes? Als ich es nachgeschlagen habe, war [es](https://qiita.com/coolwind0202/items/a4405be45734bd7f6cd5#attributeerror-%E5%9E%8B%E5%90%8D-object-has-no-attribute-% E5% B1% 9E% E6% 80% A7% E5% 90% 8D)!

Funktionen wie client.get_channel () geben None zurück, bis der BOT bereit ist. Haben Sie zum Beispiel zu Beginn des Programms plötzlich get_channel () erhalten? Um dies zu vermeiden, müssen Sie es "nach" dem Auftreten des Bereitschaftsereignisses abrufen.

"Na übrigens ..." (weint) Wo sind meine zwei Tage geblieben?

Error


AttributeError: 'NoType' object has no attribute 'send'

Ansatz

Die Problemumgehung war überraschend einfach, ja. Bevor Sie im vorherigen Artikel get_channel () ausführen, wait_until_ready () [(Referenz)](https://discordpy.readthedocs.io/ja/latest/api.html?highlight=wait_until_ready#discord.Client Alles was Sie tun müssen, ist in .wait_until_ready).

bot.py


@tasks.loop(seconds=60)
async def loop():
    global time_set
    global tem_set

    w_list = ["Mond", "Feuer", "Wasser", "Holz", "Geld", "Boden", "Tag"]  #Es hat sich weiterentwickelt!
    now_t, now_dt = datetime.now().strftime('%H:%M'), w_list[datetime.now().weekday()]

    await client.wait_until_ready()
    ch = client.get_channel(771155766056452167)
    await ch.send(f"Aktuelle Uhrzeit:`{now_t}`/ Der heutige Tag:`{now_dt}`/ Geplante Übertragungszeit:`{time_set}`/ Geplante Getriebekörpertemperatur:`{tem_set}`")

    if now_dt != "Tag":  # Tag曜Tag以外だったら送信するようにした
        if now_t == time_set:  #Ist es die geplante Übertragungszeit?
            dt_now = datetime.now().strftime("%Y-%m-%d")  #Aktuelle Zeit 2020-01-Erhalten in Form von 01, dt_Jetzt speichern

            file_name = "cfg.json"
            with open(file_name, "r", encoding="utf-8")as f:
                cfg = json.load(f)
                cfg["output"]["ans_1"] = f"{dt_now}"
                cfg["output"]["ans_4"] = f"{tem_set}"

                params = {"entry.{}".format(cfg["entry"][k]): cfg["output"][k] for k in cfg["entry"].keys()}
                res = requests.get(cfg["form_url"] + "formResponse", params=params)

            if res.status_code == 200:
                await template_embed(message=768274673984208926, title="Protokollinformationen", description=f"[URL]({res.url})",
                                     name_1="Abschlussstatus", name_2="Übertragene Körpertemperatur", value_1="Erfolgreich", color=discord.Color.green())
            else:
                res.raise_for_status()
                await template_embed(message=768274673984208926, title="Protokollinformationen", name_1="Abschlussstatus", name_2="Körpertemperatur gesendet werden",
                                     value_1="Ein Fehler ist aufgetreten.", color=discord.Color.red())

        else:
            if now_t == "21:00":
                time_set = setting_time_set()
                tem_set = set_tem()
                await template_embed(message=768274673984208926, title="Benachrichtigung über die Aktualisierung der Übertragungszeit", name_1="Nächste geplante Übertragungszeit", name_2="Körpertemperatur gesendet werden",
                                     value_1=time_set, color=discord.Color.blue())

Oh, es ist in einem Schuss gelöst ()

Zusammenfassung

Es tut mir leid für die sehr grobe Zusammenfassung ... Ich hoffe, es hilft jemandem, der sich in einer ähnlichen Situation befindet.

Referenz

Recommended Posts

Was tun, wenn beim Versuch, eine Nachricht in task.loop () unmittelbar nach dem Start zu senden, eine Fehlermeldung angezeigt wird?
Was tun, wenn beim Laden von mnist eine Fehlermeldung angezeigt wird?
Was tun, wenn beim Versuch, model.save mit Keras zu modellieren, der Fehler "get_config" überschrieben werden muss?
Was tun, wenn beim Importieren von matplotlib in Python (Mac) eine Fehlermeldung angezeigt wird?
Was tun, wenn beim Ausführen von "certbot erneuern" in der CakePHP-Umgebung eine Fehlermeldung angezeigt wird?
Was tun, wenn beim Versuch, pip mit pyenv zu verwenden, ein undefinierter Fehler angezeigt wird?
Was tun, wenn auf pipenv der Fehler "Keine Versionen gefunden" angezeigt wird?
Was tun, wenn bei der Installation von Python mit pyenv eine Fehlermeldung angezeigt wird?
Was tun, wenn beim Versuch, auf den Git-Hub zuzugreifen, der Fehler "Berechtigung verweigert" (öffentlicher Schlüssel) angezeigt wird?
Was tun, wenn bei der Installation von Python 2 mit pyenv ein OpenSSL-Fehler auftritt?
Was tun, wenn beim Konvertieren von PySparkDataFrame in PandasDataFrame ein Speicherfehler auftritt?
Was tun, wenn beim Importieren von matplotlib mit Jupyter ein Importfehler auftritt?
Was tun, wenn in Python minus Null angezeigt wird?
Was tun, wenn bei yum ein Metalink für Repository-Fehler nicht abgerufen werden kann?
Was tun, wenn der Fehler RuntimeError angezeigt wird: Python wird nicht als Framework installiert, wenn Sie versuchen, matplitlib und pylab in Python 3.3 zu verwenden
Was tun, wenn die Fehlermeldung angezeigt wird, dass der c-Compiler in configure keine ausführbaren Dateien erstellen kann?
Problemumgehung, wenn beim Versuch, PySide mit pip zu installieren, eine Fehlermeldung angezeigt wird
[Python] Dinge, die überprüft werden müssen, wenn in Django ein Unicode-Dekodierungsfehler auftritt
Was tun, wenn ein Fehler "unbekannter Dienst" vom gRPC-Server zurückgegeben wird?
Was tun, wenn in pycurl (einer von ihnen) "(35, 'SSL-Verbindungsfehler')" angezeigt wird?
Was tun, wenn Overalls "Abdeckung unbekannt" werden?
Was tun, wenn in tf.train.start_queue_runners () ein 0xC0000005-Fehler auftritt?
Was tun, wenn bei Verwendung von ts-node-dev unter Linux der Fehler "ERR_FEATURE_UNAVAILABLE_ON_PLATFORM" angezeigt wird?
Was tun, wenn Sie Python auf IntelliJ ausführen und mit einem Fehler beenden?
Was tun, wenn bei Do and Return in einem Golang-Test ein Fehler mit zu vielen Eingabeargumenten auftritt?
Was tun, wenn unter Linux die Fehlermeldung "Namensauflösung vorübergehend fehlgeschlagen" ausgegeben wird?
Was tun, wenn Swagger-Codegen mit Python und Importfehler ausgeführt wird? Es wird kein Modul mit dem Namen angezeigt
Was tun, wenn bei der Pip-Installation ein Unicode-Dekodierungsfehler auftritt?
Was tun, wenn beim Aktivieren von public_network oder private_network unter Vagrant + Arch Linux beim Vagrant + Arch Linux → Install netctl eine Fehlermeldung angezeigt wird?
Was zu tun ist, wenn Sie sich über "Umkehrungen" ärgern, muss eine 2D-Liste sein ... im matplotlib-Pfeil
Was tun, wenn pip --user in einer mit pyenv erstellten virtuellen Umgebung einen Fehler zurückgibt?
Was tun, wenn Sie mit Python keine E-Mail an Yahoo senden konnten?
Was tun, wenn Sie sich mit FileNotFoundError in der Dateireferenz verlieren?
Was tun, wenn Sie sich über TensorFlow v2 ohne Attribut 'app' ärgern?
Was tun, wenn beim Importieren von numpy mit VScode ein Fehler auftritt?
Was tun, wenn TypeError in min und max von numpy auftritt?
[OSX] [pyenv] Was tun, wenn in pip ein SSL-Fehler auftritt?
Was tun, wenn eine Warnmeldung in der Pip-Liste angezeigt wird?
Was tun, wenn im Chrome-Webtreiber (Selenium) die Fehlermeldung "Beim Anzeigen dieser Webseite ist ein Problem aufgetreten" angezeigt wird?
Was tun, wenn Sie "locale.Error: nicht unterstützte Gebietsschemaeinstellung" erhalten, wenn Sie den Tag vom Datum in Python abrufen?
Was tun, wenn ein Fehler wie "Qstring" angezeigt wird? Wurde bereits mit mne python auf Version 1 gesetzt
Was tun, wenn bei Verwendung von Python mit der NetBeans-IDE die Warnung "Falsche Python-Plattform" angezeigt wird?
Was tun, wenn Sie sich über "Wertefehler: unbekannt lokal: UTF-8" in python manage.py syncdb ärgern?
Was tun, wenn beim Importieren von Lebensläufen ein symbolischer Linkfehler auftritt, während versucht wird, OpenCV in Python zu installieren?
[Python] Was tun, wenn bei send_keys in Headless Chrome ein Fehler auftritt?
Was tun, wenn in Sublime Text Python ein Unicode-Codierungsfehler auftritt?
Was tun, wenn "Python nicht konfiguriert" angezeigt wird? Verwenden von PyDev in Eclipse
Wenn beim Tippen einer interaktiven Shell mit Anaconda eine lange Fehlermeldung angezeigt wird
Was tun, wenn im Selenium Chrome-Treiber ein Versionsfehler auftritt?
Was tun, wenn in pip ein Unicode-Dekodierungsfehler auftritt?
Was tun, wenn Sie beim Erstellen einer virtuellen Umgebung mit virtualenv die Meldung "Importfehler: Name 'HTTPSHandler' kann nicht importiert werden" erhalten
Was tun, wenn beim Laden eines mit Poesie erstellten Python-Projekts in VS Code ein Fehler auftritt?
Wenn beim Python-Scraping ein Fehler auftritt (Anforderungen)
Was tun, wenn der Fehler angezeigt wird? Die Eingabe enthält NaN, unendlich oder einen Wert, der für dtype zu groß ist ('float64').
Was tun, wenn in Hydrogen "Kein Kernel für Sprachpython gefunden" angezeigt wird?
Was tun, wenn der Druckbefehl selbst einen Fehler in Mayas Python verursacht?
Was tun, wenn bei der Installation von openCV 3 der Fehler "Fehler: opencv3: Unterstützt nicht das Erstellen von Python 2- und 3-Wrappern" angezeigt wird
Was tun, wenn pip in Homebrew einen DistributionError ausgibt?