小编Re.*_*.po的帖子

如何从Python-3中的traceback中删除函数包装器?

问题

魅影危机

假设我写了一个函数装饰器来获取该函数,并将其包装在另一个函数中,如下所示:

# 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)

python decorator python-2.x traceback python-3.x

10
推荐指数
1
解决办法
443
查看次数

标签 统计

decorator ×1

python ×1

python-2.x ×1

python-3.x ×1

traceback ×1