【发布时间】:2016-04-05 09:54:46
【问题描述】:
我有一个属性,它有一个断言来检查一个值是否是 str 类型。
为了捕捉这个assertionError,我根据我在网上找到的示例创建了一个装饰器。
装饰者:
def catch_assertionerror(function):
def handle_problems(*args, **kwargs):
try:
return function(*args, **kwargs)
except AssertionError:
# log_error(err.args[0])
print "error caught"
return handle_problems
属性:
@catch_assertionerror
@name.setter
def name(self, value):
assert isinstance(value, str), "This value should be a string"
self._name = name
设置名称属性:
self.name = self.parse_name_from_xml()
当我运行这段代码时,没有显示错误,所以我猜它被捕获了,但另一方面,错误消息没有打印到屏幕上。
然后我尝试了一个在 Stachoverflow 上找到的更简单的示例:
def handleError(function):
def handleProblems():
try:
function()
except Exception:
print "Oh noes"
return handleProblems
@handleError
def example():
raise Exception("Boom!")
这也处理了错误,但没有将错误消息打印到屏幕上。
有人可以向我解释一下我在这里缺少什么吗?
【问题讨论】:
-
你没有显示调用函数的代码
-
我刚刚在交互式 python 会话中尝试了您的“更简单的示例”,它按预期工作。你是如何运行这段代码的?