在自定义异常构造函数中记录消息是否有任何警告?

时间:2014-07-22 02:47:23

标签: python exception

每次我捕获异常时我都要记录它的内容,所以将它放在Exception构造函数中是明智的吗?我在这里挖掘自己的坟墓吗?

import logging


logger = logging.getLogger(__name__)


class GatewayException(Exception):
    message = None

    def __init__(self, message, *args, **kwargs):
        super(GatewayException, self).__init__(message)
        self.message = message
        self.__dict__.update(kwargs)
        logger.error(message)
        for key, value in kwargs.items():
            logger.error("{} : {}".format(key, value))

1 个答案:

答案 0 :(得分:-1)

我建议在logger课程中忽略GatewayException来电。

您当前编写的代码使用的是全局 logger对象,如果您要使用,则会违反封装并且可能会出现问题记录器在各种类/模块/等的其他地方。

要解决该问题,您可以logger传递给GatewayException构造函数,但如果您实际上并不希望在特定内容中记录某些内容,该怎么办? except点?

为了实现这种可能性,如果您将消息封装在异常中,并省略logger调用,您可以在except点选择是否记录错误,使用本地logger对象,无论可能是什么。

为确保格式一致,您可以将格式/输出代码集中到__str__函数中,该函数从内部引用class个成员。