Добавление «повтор» заставило меня потерять трассировку - PullRequest
0 голосов
/ 07 декабря 2018

В настоящее время у меня есть сценарий, определенный следующим образом:

import traceback
import logging
import time

logging.basicConfig(level=loggings.DEBUG)
logger=logging.getLogger(__name__)

if __name__ == '__main__':
    try:
        main_code()
    except Exception as e:
        logger.debug(traceback.format_exc())
        error = traceback.format_exc()
        with smtplib.SMTP("mailhub.global.company.com") as mailServer:
            msg = MIMEMultipart('related')
            msg['Subject'] = Header(u'Test', 'utf-8')
            msg['X-Priority'] = '2'
            body = "Delivery Failure, the following exception occurred:\n\n" + str(error)
            msg.attach(MIMEText(body, 'plain'))
            mailServer.sendmail("email@gmail.com", ["email@gmail.com"], msg.as_string()) 
            mailServer.quit()
        print("Exception occurred- delivery failure email sent")

Это прекрасно работает в том смысле, что при возникновении ошибки я получаю электронное письмо с traceback.

Я попыталсядобавьте «повтор» в код в случае сбоя, чтобы он повторил 5 попыток, с интервалом в 5 секунд, например:

if __name__ == '__main__':
    for attempt in range(5):
        try:
            main_code()
        except Exception as e:
            print("Error occurred, retrying in 5 seconds!")
            time.sleep(5)
            continue
        else:
            break
    else:
        logger.debug(traceback.format_exc())
        error = traceback.format_exc()
        with smtplib.SMTP("mailhub.global.company.com") as mailServer:
            msg = MIMEMultipart('related')
            msg['Subject'] = Header(u'Test', 'utf-8')
            msg['X-Priority'] = '2'
            body = "Delivery Failure, the following exception occurred:\n\n" + str(error)
            msg.attach(MIMEText(body, 'plain'))
            mailServer.sendmail("email@gmail.com", ["email@gmail.com"], msg.as_string()) 
            mailServer.quit()
        print("Exception occurred- delivery failure email sent")

Однако по какой-то причине, когда я получаю сообщение об ошибке доставки сейчасвсе, что он говорит, это: Delivery Failure, the following exception occurred: NoneType: None

Есть идеи, как отследить ошибку в отправленном электронном письме?

1 Ответ

0 голосов
/ 07 декабря 2018

Исключение "очищается" (уничтожается), когда вы покидаете блок except, поэтому функции в модуле traceback не могут его увидеть, когда вы доберетесь до последнего блока else.Вы, вероятно, хотите переместить error = traceback.format_exc() в блок except (а также передать error в logger.debug()).

...