gpt4 book ai didi

python - 有没有办法进入装饰函数,跳过装饰器代码

转载 作者:太空狗 更新时间:2023-10-29 20:54:42 26 4
gpt4 key购买 nike

我有一个模块,它使用自定义装饰器装饰一些关键函数。

用 pdb 调试这些函数通常有点痛苦,因为每次我进入装饰函数时,我首先必须单步调试装饰器代码本身。

我当然可以将调试器设置为在我感兴趣的函数内中断,但作为关键函数,它们会从许多地方多次调用,所以我通常更喜欢在函数外开始调试。

我试着用代码来说明它,但我不知道这是否有帮助:

def i_dont_care_about_this(fn):
@functiontools.wraps(fn)
def wrapper(*args, **kwargs):
return fn(*args, **kwargs)
return wrapper

@i_dont_care_about_this
def i_only_care_about_this():
# no use to set pdb here

def i_am_here():
import pdb; pdb.set_trace()
i_only_care_about_this()

那么,有没有一种方法可以让我从 i_am_here 进入 i_only_care_about_this 而无需经过 i_dont_care_about_this

本质上,我想在使用 s 以 (s) 进入给定的装饰函数时跳过所有装饰器代码。

最佳答案

如果装饰器纯粹用于日志记录或其他非功能性行为,则使其成为调试的空操作 - 在 i_dont_care_about_this 的定义之后插入此代码:

DEBUG = False
# uncomment this line when pdb'ing
# DEBUG = True
if DEBUG:
i_dont_care_about_this = lambda fn : fn

但是如果它包含实际的事件代码,那么您将不得不使用 pdb 方法来完成工作,例如在装饰器的代码中有条件地调用 pdb.set_trace:

BREAK_FLAG = False
...
# (inside your function you want to debug)
if BREAK_FLAG:
import pdb; pdb.set_trace()
...
# at your critical calling point
BREAK_FLAG = True

关于python - 有没有办法进入装饰函数,跳过装饰器代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10413052/

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