Question

J'ai installé le module d'enregistrement pour mon nouveau script python. J'ai deux gestionnaires, un envoyer des trucs à un fichier, et un pour les alertes e-mail. Le SMTPHandler est configuré pour poster quoi que ce soit au niveau ERROR ou au-dessus.

Tout fonctionne très bien, à moins que la connexion échoue SMTP. Si le serveur SMTP ne répond pas ou l'authentification échoue (il nécessite une authentification SMTP), puis meurt tout le script.

Je suis assez nouveau à python, donc je suis en train de comprendre comment capturer l'exception que la SMTPHandler soulève afin que tous les problèmes pour envoyer le message du journal par courrier électronique ne seront pas descendre mes script entier. Depuis que je suis également en train d'écrire des erreurs dans un fichier journal, en cas d'échec d'alerte SMTP, je veux juste continuer, rien arrêter.

Si je besoin d'un « essayer: » déclaration, serait-il contourner la configuration du logging.handlers.SMTPHandler, ou autour des appels individuels à my_logger.error ()

Était-ce utile?

La solution

Exceptions qui se produisent pendant l'enregistrement ne doit pas arrêter votre script, mais ils peuvent causer un retraçage à imprimer à sys.stderr. Afin d'éviter cette impression, procédez comme suit:

logging.raiseExceptions = 0

Ce n'est pas la valeur par défaut (parce que dans le développement que vous voulez généralement savoir sur les échecs), mais dans la production, raiseExceptions ne doit pas être réglée.

Vous devriez trouver que le SMTPHandler va tenter une nouvelle connexion la prochaine fois une erreur (ou plus) est connecté.

logging Finalité passent par des exceptions SystemExit et KeyboardInterrupt, mais tous les autres doivent être manipulés afin qu'ils ne causent pas la fin d'une application qui utilise l'exploitation forestière. Si vous trouvez que ce n'est pas le cas, s'il vous plaît poster des détails spécifiques des exceptions qui sont passer à travers et provoquant votre script de mettre fin, et de votre version du système Python / d'exploitation. Gardez à l'esprit que le script peut sembler se bloquer s'il y a un délai d'attente de réseau qui est à l'origine du gestionnaire à bloquer (par exemple si une recherche DNS prend beaucoup de temps, ou si la connexion SMTP prend beaucoup de temps).

Autres conseils

Vous avez probablement besoin de faire les deux. Pour comprendre cela, je vous suggère d'installer un serveur de messagerie local et l'utiliser. De cette façon, vous pouvez le fermer pendant que votre script est exécuté et notez le message d'erreur.

Pour conserver le code maintenable, vous devriez étend SMTPHandler de telle sorte que vous pouvez gérer les exceptions dans un seul endroit (au lieu d'envelopper chaque appel avec enregistreur try-except).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top