exception handling decorator which accepts functions as args
我有一个异常处理装饰器,看起来像这样:
1 2 3 4 5 6 7 8 9 10 | def error_handler(errors=(Exception, ), default=""): def funcator(func): def deep_inside(*args, **kwargs): try: return func(*args, **kwargs) except errors as e: print("i just cought a", repr(e)) return default return deep_inside return funcator |
这是一个示例用法:
1 2 3 4 5 6 7 | date_error_handler = error_handler((ValueError), default="INVALID") from dateutil import parser @date_error_handler def date_parser(date): return parser.parse(date) |
现在,如果我通过这样的事情:
1 | date_parser("12/10/1O") |
我会得到这样的输出:
1 2 3 4 | #output: i just cought a ValueError('Unknown string format:', '12/1O/10') 'INVALID' |
而不是返回
1 2 | #alphabet to number replacing function(just for example) def alpha_to_num(date): return date.replace("O","0") |
现在我需要将此
这是预期输出和使用的示例:
这是一个示例用法:
1 2 3 4 5 | from dateutil import parser @error_handler((ValueError), default=alpha_to_num) def date_parser(date): return parser.parse(date) |
但现在我想获得这样的输出:
1 2 3 4 | #expected output: i just cought a ValueError('Unknown string format:', '12/1O/10') '12/10/10' |
我该怎么办?
您正在返回该函数而不是调用该函数。 使用下面的代码。
编辑:如果未传递或传递函数值,则添加处理值不是函数。
1 2 3 4 5 6 7 8 9 10 | def error_handler(errors=(Exception, ), default=""): def funcator(func): def deep_inside(*args, **kwargs): try: return func(*args, **kwargs) except errors as e: print("i just cought a", repr(e)) return default(*args, **kwargs) if hasattr(default,'__call__') else default return deep_inside return funcator |