假设我写了一个函数装饰器来获取该函数,并将其包装在另一个函数中,如下所示:
# File example-1.py
from functools import wraps
def decorator(func):
# Do something
@wraps(func)
def wrapper(*args, **kwargs):
# Do something
return func(*args, **kwargs)
# Do something
# Do something
return wrapper
Run Code Online (Sandbox Code Playgroud)
现在让我们假设我正在装饰的函数引发异常:
@decorator
def foo():
raise Exception('test')
Run Code Online (Sandbox Code Playgroud)
运行的结果foo()将打印出以下回溯(在任何Python版本中):
Traceback (most recent call last):
File "./example-1.py", line 20, in <module>
foo()
File "./example-1.py", line 11, in wrapper
return func(*args, **kwargs)
File "./example-1.py", line 18, in foo
raise Exception('test')
Exception: test
Run Code Online (Sandbox Code Playgroud)
好的,现在我看看我的追溯,我看到它通过该wrapper功能.如果我多次包装函数(假设有一个稍微复杂的装饰器对象在其构造函数中接收参数),该怎么办?如果我经常在我的代码中使用这个装饰器(我用它来记录,或分析,或其他什么)怎么办?
Traceback (most recent …Run Code Online (Sandbox Code Playgroud)