deco1:
def deco(func):
def wrapper(*args, **kwargs):
f = func(*args, **kwargs)
print("deco success")
return f
return wrapper
deco2:
def deal_exc(func):
def wrapper(*arg, **kwargs):
try:
return func(*arg, **kwargs)
except Exception as e:
print(str(e))
return wrapper
使用decos:
@deal_exc
@deco
def a_function():
print(0 / 100)
raise Exception("666")
当我引发异常时如何跳过print("deco success")
并让deal_exc
装饰器处理该异常?
答案 0 :(得分:1)
将装饰器放在装饰器上方时,上装饰器实际上包装(读取调用)下装饰器,类似地,下装饰器包装(读取调用)实际功能。
因此,除非删除装饰器,否则不能跳过处理。
如果您希望内部装饰器(deco
)不处理某些特定情况,则必须对其进行检查。例如:
在上述情况下,由于内部装饰器中没有try-catch
处理,因此函数抛出的异常将由最外面的装饰器(deal_exc
)自动处理。
答案 1 :(得分:0)
请如下更新装饰器功能:
def deco(func):
def wrapper(*args, **kwargs):
try:
f = func(*args, **kwargs)
print("deco success")
except:
return f
return wrapper
try-catch语句可以帮助您根据需要处理异常。