【发布时间】:2019-07-26 10:09:19
【问题描述】:
我的目标是在我的程序遇到意外行为时引发 SystemExit 并记录错误。
我正在做类似的事情:
logger.error('Unexpected behaviour')
raise SystemExit
为了避免代码中的重复,我尝试编写一个装饰器以在每次 logger.error 调用时引发 SystemExit:
error = logger.error
def error_from_logger(msg) :
''' Decorator for logger.error to kill the program at the call '''
error(msg)
raise SystemExit
logger.error = error_from_logger
del(error_from_logger)
所以我的问题是:我的装饰器是 Python 的吗?如果不是,最好的 Pythonic 方式是什么? (我看到人们使用@something,但我不明白它的用法)。
谢谢!
【问题讨论】:
-
这看起来更像monkey patching
-
@bracco23 确实......所以它不是装饰器,因为它修改了函数的行为?
-
它不是装饰器,因为您实际上是在用您编写的自定义函数更改
logger模块的error函数,这实际上为原始函数添加了行为。这是一个棘手的举动,它的行为可能不像你想要的那样,特别是因为你让它抛出一个异常。我会选择外观模式,使用自定义对象,而该对象反过来使用记录器。 -
@bracco23 好的,你是对的,我将做一个单独的对象,而不是修改记录器。谢谢你的解释!
标签: python decorator python-decorators python-logging