我有一个异常处理装饰器,看起来像这样:
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
的default
param。
这是预期输出和使用的示例:
这是一个示例用法:
from dateutil import parser
@error_handler((ValueError), default=alpha_to_num)
def date_parser(date):
return parser.parse(date)
但现在我想获得这样的输出:
#expected output:
i just cought a ValueError('Unknown string format:', '12/1O/10')
'12/10/10'
我该怎么办?
1 回答
您正在返回该函数而不是调用该函数。使用下面的代码。
编辑:如果未传递或传递函数值,则添加处理值不是函数。