我有一个异常处理装饰器,如下所示:
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
这是一个示例用法:
date_error_handler = error_handler((ValueError), default="INVALID")
from dateutil import parser
@date_error_handler
def date_parser(date):
return parser.parse(date)
现在,如果我通过这样的事情:
date_parser("12/10/1O")
我将得到这样的输出:
#output:
i just cought a ValueError('Unknown string format:', '12/1O/10')
'INVALID'
而不是返回"INVALID"
,我想将一个函数作为参数传递给default
(在error_handler
装饰器中),该函数将使用日期字符串并尝试替换是否有字母里面有数字。例如,它看起来像这样:
#alphabet to number replacing function(just for example)
def alpha_to_num(date): return date.replace("O", "0")
现在我需要将此alpha_to_num
传递为error_handler
的{{1}}参数的参数。
这是预期输出和使用的示例:
这是一个示例用法:
default
但是现在我想要得到这样的输出:
from dateutil import parser
@error_handler((ValueError), default=alpha_to_num)
def date_parser(date):
return parser.parse(date)
我该怎么做?
答案 0 :(得分:0)
您将返回该函数,而不是调用该函数。使用以下代码。
edit:如果未传递函数值或传递的值不是函数,则添加了处理。
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