Récemment, Misty a commencé à tomber malade parce qu'elle ne voulait pas aller à l'école. Dans Article précédent, j'imprimais () l'heure actuelle et l'heure de transmission prévue pour le débogage, mais j'ai eu l'idée de "imprimer sur syslog (print () ) Envoyez tout à Discord. »Je l'ai changé, mais une erreur s'est produite et je me suis débattu pendant environ deux jours. Je voudrais vous présenter la méthode d'adaptation à ce moment-là.
Code lors du lancement d'une erreur
bot.py
@tasks.loop(seconds=60)
async def loop():
global time_set
global tem_set
w_list = ["Lune", "Feu", "eau", "bois", "Argent", "sol", "journée"] #Cela a évolué!
now_t, now_dt = datetime.now().strftime('%H:%M'), w_list[datetime.now().weekday()]
ch = client.get_channel(771155766056452167)
await ch.send(f"Heure actuelle:`{now_t}`/ Jour d'aujourd'hui:`{now_dt}`/ Heure de transmission programmée:`{time_set}`/ Température corporelle de transmission programmée:`{tem_set}`")
if now_dt != "journée": # journée曜journée以外だったら送信するようにした
if now_t == time_set: #Est-ce l'heure de transmission programmée?
dt_now = datetime.now().strftime("%Y-%m-%d") #Heure actuelle 2020-01-Obtenu sous la forme de 01, dt_Stocker maintenant
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="Informations du journal", description=f"[URL]({res.url})",
name_1="L'état d'achèvement", name_2="Température corporelle transmise", value_1="Réussi", color=discord.Color.green())
else:
res.raise_for_status()
await template_embed(message=768274673984208926, title="Informations du journal", name_1="L'état d'achèvement", name_2="Température corporelle à envoyer",
value_1="Une erreur est survenue.", 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="Notification de mise à jour de l'heure de transmission", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
value_1=time_set, color=discord.Color.blue())
Lorsque j'exécute ce code, j'obtiens l'erreur suivante: Au début, je pensais que c'était un copier / coller de l'ID, mais même si je l'ai copié à nouveau, j'ai eu une erreur, alors peut-être qu'il y a autre chose? Quand je l'ai recherché, [c'était](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)!
Des fonctions telles que client.get_channel () retournent None tant que le BOT n'est pas prêt. Par exemple, avez-vous soudainement obtenu_channel () au début du programme? Pour éviter cela, vous devez l'obtenir "après" l'événement prêt.
"Et bien, au fait ..." (pleurer) Où sont passés mes deux jours?
Erreur
AttributeError: 'NoType' object has no attribute 'send'
La solution de contournement était étonnamment simple, oui.
Avant de faire get_channel ()
dans l'article précédent, wait_until_ready ()
[(reference)](https://discordpy.readthedocs.io/ja/latest/api.html?highlight=wait_until_ready#discord.Client Tout ce que vous avez à faire est de mettre .wait_until_ready).
bot.py
@tasks.loop(seconds=60)
async def loop():
global time_set
global tem_set
w_list = ["Lune", "Feu", "eau", "bois", "Argent", "sol", "journée"] #Cela a évolué!
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"Heure actuelle:`{now_t}`/ Jour d'aujourd'hui:`{now_dt}`/ Heure de transmission programmée:`{time_set}`/ Température corporelle de transmission programmée:`{tem_set}`")
if now_dt != "journée": # journée曜journée以外だったら送信するようにした
if now_t == time_set: #Est-ce l'heure de transmission programmée?
dt_now = datetime.now().strftime("%Y-%m-%d") #Heure actuelle 2020-01-Obtenu sous la forme de 01, dt_Stocker maintenant
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="Informations du journal", description=f"[URL]({res.url})",
name_1="L'état d'achèvement", name_2="Température corporelle transmise", value_1="Réussi", color=discord.Color.green())
else:
res.raise_for_status()
await template_embed(message=768274673984208926, title="Informations du journal", name_1="L'état d'achèvement", name_2="Température corporelle à envoyer",
value_1="Une erreur est survenue.", 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="Notification de mise à jour de l'heure de transmission", name_1="Prochaine heure de transmission programmée", name_2="Température corporelle à envoyer",
value_1=time_set, color=discord.Color.blue())
Oh, c'est résolu en un seul coup ()
--Si vous obtenez une erreur lors de l'utilisation d'une fonction telle que get_channel ()
dans tasks.loop
, vous pouvez la corriger en insérant wait_until_ready ()
.
Je suis désolé pour le résumé très approximatif ... J'espère que cela aide quelqu'un qui se trouve dans une situation similaire.
Recommended Posts