Python -- 异常抛出时发送邮件?
我有一个 python
类,这个类里面有很多方法:
Method1()
Method2()
...........
...........
MethodN()
这些方法虽然执行的任务不同,但它们的结构是一样的:
do something
do something else
has anything gone wrong?
raise an exception
我希望每当这个类里面发生错误时,都能收到一封邮件。
有没有什么简单的方法可以把这个逻辑放到类里面,而不是在每个 raise Exception
语句之前都调用一次 SendEmail()
呢?处理这种情况的正确、符合 Python 风格的方法是什么?一个“通用”的异常处理器能解决这个问题吗?如果你有任何想法,我会很感激。
12 个回答
8
Python的标准库里有一个专门的类可以帮你完成你想做的事情。你可以看看 logging.handlers.SMTPHandler
。
81
就像@User之前说的,Python有一个叫做 logging.handlers.SMTPHandler
的工具,可以用来发送记录的错误信息。建议使用这个日志模块!重写异常类来发送邮件并不是个好主意。
这里有个简单的例子:
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')
9
注意:虽然这个解决方案看起来简单明了,但下面的回答在大多数情况下可能更好。
如果替代方案是这样的:
if problem_test():
SendEmail()
raise Exception
那你为什么不直接定义一个自定义的 raise_email
方法呢?
def raise_email(self, e):
SendEmail()
raise e