在自定义异常构造函数中记录消息有什么注意事项吗?

2024-04-20 00:01:13 发布

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

每次我捕捉到异常时,我都想记录一些关于它的信息,所以明智的做法是将其放入异常构造函数中?我是在这里自掘坟墓吗?你知道吗

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

Tags: keyimportself信息messageinitvaluelogging
1条回答
网友
1楼 · 发布于 2024-04-20 00:01:13

我建议在GatewayException类本身中省略logger调用。你知道吗

您当前编写的代码使用了一个全局logger对象,这违反了封装,如果您想在分类类/模块等中的其他地方使用记录器,可能会有问题

为了解决这个问题,您可以logger传递给GatewayException构造函数,但是如果您实际上不想在某个特定的except点记录某些内容呢?你知道吗

为了允许这种可能性,如果您将消息封装在异常中,并且省去了logger调用,那么您可以在except点选择是否记录错误,使用本地logger对象,不管是什么。你知道吗

为了确保格式化的一致性,可以将格式化/输出代码集中到__str__函数中,该函数从内部引用class成员。你知道吗

相关问题 更多 >