首页 > 解决方案 > 引发错误和记录时减少样板代码

问题描述

假设我在一些属性的设置器中编写一个类,我正在检查输入的有效性。例如,如果输入无效,我将提高 a TypeError,但我还需要记录所有内容以进行调试。这导致我不得不重复错误消息。

例如:

import logging
import datetime as dt
from dataclasses import dataclass


logger = logging.getLogger(__name__)


@dataclass()
class Foo:
    start_date: dt.datetime

    @property
    def start_date(self) -> dt.datetime:
        return self.__start_date
    
    @start_date.setter
    def start_date(self, val: dt.datetime):
        if not isinstance(val, dt.datetime):
            logger.exception('Expecting datetime as start date, '
                             f'got {type(val)} instead.')
            raise TypeError('Expecting datetime as start date, '
                            f'got {type(val)} instead.')
        else:
            self.__start_date = val

所以在这里我不得不复制错误消息。我当然可以将 TypeError 消息留空并依靠屏幕记录器来打印错误,但这似乎是个坏主意,因为回溯将带有一个空的错误消息。

只是在偶然的情况下询问是否有一种更优雅的方式将日志记录与异常引发结合起来。

标签: pythonexceptionlogging

解决方案


推荐阅读