代码之家  ›  专栏  ›  技术社区  ›  user8834780

添加“重试”导致我丢失了回溯

  •  0
  • user8834780  · 技术社区  · 6 年前

    目前我有一个这样定义的脚本:

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

    如果出现错误,我会收到一封带有回溯功能的电子邮件。

    我尝试在失败的情况下向代码添加“重试”,以便它尝试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 回复  |  直到 6 年前
        1
  •  1
  •   Kevin    6 年前

    当您离开 except 块,以便在 traceback 当你进入决赛时,模块看不到它。 else 块。你可能想搬家 error = traceback.format_exc() 进入 除了 阻止(也通过) error logger.debug() )