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.
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'
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 ()
Es tut mir leid für die sehr grobe Zusammenfassung ... Ich hoffe, es hilft jemandem, der sich in einer ähnlichen Situation befindet.
Recommended Posts