我用装饰器类来装饰一个异常,但是似乎这个异常不能被精确地捕获到。使用 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
派生装饰器吗? - Ignacio Vazquez-Abrams@ClsDecor
之后,Err
是ClsDecor
的一个 实例。Err()
返回最初的Err
类的一个实例(其名称被装饰覆盖)。现在,在Err
和从Err()
返回的实例之间存在明显的类型不匹配。实际上类型是Err.cls
。 - dhke