[PYTHON] Que faire si vous obtenez une erreur en essayant d'envoyer un message dans tasks.loop () immédiatement après le démarrage

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à.

Sujet principal

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'

approche

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 ()

Sommaire

--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.

référence

Recommended Posts

Que faire si vous obtenez une erreur en essayant d'envoyer un message dans tasks.loop () immédiatement après le démarrage
Que faire si vous obtenez une erreur lors du chargement de mnist
Que faire si vous obtenez une erreur de remplacement obligatoire `get_config` lorsque vous essayez de model.save avec Keras
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire si vous obtenez une erreur lors de l'exécution de "certbot renouveler" dans l'environnement CakePHP
Que faire si vous obtenez une erreur non définie lorsque vous essayez d'utiliser pip avec pyenv
Que faire si vous obtenez une erreur "Aucune version trouvée" sur pipenv
Que faire si vous obtenez une erreur lors de l'installation de python avec pyenv
Que faire si vous obtenez une erreur d'autorisation refusée (clé publique) lorsque vous essayez de tirer sur le hub Git
Que faire si vous obtenez une erreur OpenSSL lors de l'installation de Python 2 avec pyenv
Que faire si vous obtenez une erreur de mémoire lors de la conversion de PySparkDataFrame en PandasDataFrame
Que faire si vous obtenez une erreur d'importation lors de l'importation de matplotlib avec Jupyter
Que faire si vous obtenez moins zéro en Python
Que faire si vous obtenez une erreur Impossible de récupérer le lien métallique pour le référentiel avec yum
Que faire si vous obtenez l'erreur RuntimeError: Python n'est pas installé en tant que framework lorsque vous essayez d'utiliser matplitlib et pylab dans Python 3.3
Que faire si vous obtenez une erreur indiquant que le compilateur C ne peut pas créer d'exécutables dans configure
Solution de contournement si vous obtenez une erreur lors de la tentative d'installation de PySide avec pip
[Python] Choses à vérifier lorsqu'une erreur de décodage Unicode apparaît dans Django
Que faire lorsqu'une erreur "service inconnu" est renvoyée par le serveur gRPC
Que faire si vous obtenez "(35, 'Erreur de connexion SSL')" dans pycurl (l'un d'entre eux)
Que faire si Combinaisons devient «couverture inconnue»
Que faire si une erreur 0xC0000005 se produit dans tf.train.start_queue_runners ()
Que faire si vous obtenez l'erreur ʻERR_FEATURE_UNAVAILABLE_ON_PLATFORM` lors de l'utilisation de ts-node-dev sous Linux
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
Que faire si vous recevez une erreur d'appel avec trop d'arguments d'entrée à faire et retourner dans un test de golang
Que faire lorsque vous obtenez une erreur indiquant «Échec temporaire de la résolution du nom» sous Linux
Que faire lorsque swagger-codegen est terminé avec python et Erreur d'importation: aucun module nommé n'apparaît
Que faire si vous obtenez une erreur de décodage Unicode avec l'installation de pip
Que faire si vous obtenez une erreur lors du vagabondage lorsque vous activez public_network ou private_network sur Vagrant + Arch Linux → Installer netctl
Que faire si vous vous fâchez contre les `` déclarations '' doivent être une liste 2D ... dans la flèche matplotlib
Que faire lorsque pip --user renvoie une erreur dans un environnement virtuel créé avec pyenv
Que faire si vous ne parvenez pas à envoyer un e-mail à Yahoo avec Python.
Que faire si vous vous perdez dans la référence de fichier avec FileNotFoundError
Que faire si vous vous fâchez avec TensorFlow v2 sans l'attribut "app"
Que faire si une erreur se produit lors de l'importation de numpy avec VScode
Que faire lorsque TypeError se produit au minimum et au maximum de numpy
[OSX] [pyenv] Que faire lorsqu'une erreur SSL se produit dans pip
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
Que faire si un message d'erreur "Un problème est survenu lors de l'affichage de cette page Web" s'affiche dans le pilote Web de Chrome (Selenium)
Que faire si vous obtenez `locale.Error: unsupported locale setting` lors de l'obtention de la date du jour en Python
Que faire si vous obtenez une erreur comme "Qstring" a déjà été défini sur la version 1 en utilisant mne python
Que faire si vous obtenez un avertissement "Mauvaise plateforme Python" lors de l'utilisation de Python avec l'EDI NetBeans
Que faire lorsque vous vous fâchez avec "Value Error: unknown local: UTF-8" dans python manage.py syncdb
Que faire si une erreur de lien symbolique se produit dans l'importation cv lors de la tentative d'installation d'OpenCV en Python
[python] Que faire si vous obtenez une erreur avec send_keys dans le chrome sans tête
Que faire si une erreur de codage Unicode se produit dans Sublime Text Python
Que faire si vous obtenez «Python non configuré». Utilisation de PyDev dans Eclipse
Si vous obtenez une longue erreur lors de la tabulation d'un shell interactif avec Anaconda
Que faire si une erreur de version se produit dans le pilote Selenium Chrome
Que faire si une erreur de décodage Unicode se produit dans pip
Que faire si on vous dit «Erreur d'importation: impossible d'importer le nom'HTTPSHandler '» lors de la création d'un environnement virtuel à l'aide de virtualenv
Que faire si une erreur se produit lorsque vous chargez un projet Python créé avec de la poésie dans VS Code
Lorsqu'une erreur se produit dans le scraping python (requêtes)
Que faire si vous obtenez l'erreur L'entrée contient NaN, l'infini ou une valeur trop grande pour dtype ('float64').
Que faire quand "Aucun noyau pour le langage python trouvé" apparaît dans Hydrogen
Que faire si la commande d'impression elle-même provoque une erreur dans le python de Maya
Que faire si vous obtenez l'erreur "Erreur: opencv3: Ne prend pas en charge la construction des wrappers Python 2 et 3" lors de l'installation d'openCV 3
Que faire si pip donne une DistributionError dans Homebrew