【发布时间】:2017-09-05 00:34:53
【问题描述】:
我使用装饰器类来装饰异常,但是,似乎无法使用确切的异常类来排除异常。使用 functools.update_wrapper 更新装饰器类也不起作用。
class ClsDecor(object):
def __init__(self,cls):
self.cls=cls
self.counter=0
def __call__(self,*args):
self.counter+=1
return self.cls(*args)
@ClsDecor
class Err(Exception):
def __init__(self):
Exception.__init__(self)
try:
raise Err()
except Err as e:
print 'catched'
except Exception as e:
print 'Not catched'
【问题讨论】:
-
你试过从
Exception派生装饰器吗? -
谢谢,试过了,不行。
-
在
@ClsDecor之后,Err是ClsDecor的一个实例。Err()返回初始Err类的实例(其名称被装饰覆盖)。现在Err和从Err()返回的实例之间存在明显的类型不匹配。类型其实是Err.cls。 -
谢谢,是的,Err.cls 可以工作,有没有什么包装工具可以解决这个问题?
-
而且,在默认情况下,当我捕获异常时,它的类型是
main.Err'>.
标签: python exception decorator