python - 引发错误和记录时减少样板代码
问题描述
假设我在一些属性的设置器中编写一个类,我正在检查输入的有效性。例如,如果输入无效,我将提高 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 消息留空并依靠屏幕记录器来打印错误,但这似乎是个坏主意,因为回溯将带有一个空的错误消息。
只是在偶然的情况下询问是否有一种更优雅的方式将日志记录与异常引发结合起来。
解决方案
推荐阅读
- ios - 渲染 MKMarkerAnnotationView 问题 - 从顶部截取
- sql - 如何将这些 SQL 语句分组为一批,以便一次执行?
- regex - Notepad++ Regex: delete lines that are identical between start and defined string and clip after said string
- c# - 更改 BSON 中的类型信息
- go - 按 createdDate golang 排序列表
- sql-server - 'database' 已压缩但不驻留在只读数据库或文件组中
- c# - Catel 是否有任何方式同步显示窗口(基于 ViewModel)?
- excel - 如何修复 Office 2013 上发生的范围激活运行时错误 9,但不在 Office365 上
- tfs - 作为存档 zip 文件名一部分的时间格式
- java - 无法将“java.lang.String”类型的值转换为所需的“java.util.Date”类型