gpt4 book ai didi

python - 一个对 python 装饰器感到困惑的人

转载 作者:行者123 更新时间:2023-12-01 09:06:44 24 4
gpt4 key购买 nike

装饰1:

def deco(func):
def wrapper(*args, **kwargs):
f = func(*args, **kwargs)
print("deco success")
return f

return wrapper

装饰2:

def deal_exc(func):
def wrapper(*arg, **kwargs):
try:
return func(*arg, **kwargs)
except Exception as e:
print(str(e))

return wrapper

使用装饰:

@deal_exc
@deco
def a_function():
print(0 / 100)
raise Exception("666")

当我引发异常时如何跳过 print("deco success") 并让 deal_exc 装饰器处理异常?

最佳答案

当您将装饰器放在装饰器之上时,上层装饰器实际上包装(读取调用)下层装饰器,类似地,下层装饰器包装(读取调用)实际函数。

因此,除非删除装饰器,否则无法跳过处理。

如果您希望内部装饰器(deco)不处理某些特定场景,则必须对其进行检查。例如:

在上面的例子中,由于内部装饰器中没有 try-catch 处理,所以函数抛出的异常会自动交由最外层装饰器处理(deal_exc).

关于python - 一个对 python 装饰器感到困惑的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com