Python——在引发异常时发送电子邮件?

2024-04-28 17:12:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有许多方法的python类:

Method1()

Method2()

。。。。。。。。。。。

。。。。。。。。。。。

MethodN()

执行不同任务时,所有方法都有相同的方案:

do something
do something else
has anything gone wrong?
    raise an exception

我想在课堂上任何地方出现异常时都能收到电子邮件。

有没有什么简单的方法可以将这个逻辑组合到类中,而不是在每个raise Exception语句之前调用SendEmail()?什么是正确的,Python式的方式来处理这样的案件?“通用”异常处理程序可以解决吗?如果你有什么想法,我会很高兴的。


Tags: 方法anexception方案doelsesomethingraise
3条回答

注意:尽管如前所述,这是一个简单、明显的问题解决方案,但在大多数情况下,below answer可能更好。

如果备选方案是:

if problem_test():
    SendEmail()
    raise Exception

那为什么不定义一个自定义的raise_email方法呢?

def raise_email(self, e):
    SendEmail()
    raise e

就像@User在Python有^{}发送记录的错误消息之前所说的那样。使用日志模块!重写异常类以发送电子邮件是一个坏主意。

快速示例:

import logging
import logging.handlers

smtp_handler = logging.handlers.SMTPHandler(mailhost=("smtp.example.com", 25),
                                            fromaddr="from@example.com", 
                                            toaddrs="to@example.com",
                                            subject=u"AppName error!")


logger = logging.getLogger()
logger.addHandler(smtp_handler)

try:
  break
except Exception as e:
  logger.exception('Unhandled Exception')

Python stdlib有专门的类来做您想要的事情。见logging.handlers.SMTPHandler

相关问题 更多 >