例如,从我当前的项目中:
self.updated_at = datetime.strptime(kwargs.get("updated_at", None), datetime_format)
self.timestamp = datetime.strptime(kwargs.get("timestamp", None), datetime_format)
这些行用于在我的程序中实例化一个类的实例。
很显然,如果将默认值None
传递给datetime.strptime
,我将得到一个异常,可能是一个TypeError
(我尚未测试)。如果发生该错误,我希望将这两个变量都默认设置为None
,否则将完全避免该错误。
我可以用这样的函数将它们包装起来(在它是装饰器的事实之后被注意):
def wrap_throwable(func, *exc):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except exc:
return None
return wrapper
然后是课程中的作业:
self.updated_at = wrap_throwable(
lambda: datetime.strptime(
kwargs["updated_at"],
datetime_format),
KeyError)()
self.timestamp = wrap_throwable(
lambda: datetime.strptime(
kwargs["timestamp"],
datetime_format),
KeyError)()
我还没有测试代码,但这是一个主意。我想知道是否可以在不创建另一个实用程序功能的情况下执行此操作,如上所述。