python 检查调用函数是否是来自

python inspect if caller function is a generator from

我想从函数装饰器中检索有关调用方函数的信息。也就是说,我想知道调用函数是否是一个生成器。正在尝试检查外部堆栈框架,但我找不到方法

def decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        inspect.isgeneratorfunction(func) ### THIS WORKS 
        frame = inspect.currentframe().f_back
        ### HERE THE MAGIC

    return wrapper

可能吗?或者有一种简单的方法吗?

generator = bool(frame.f_code.co_flags&32)

从一些小测试来看,至少在我的 python3 版本中,生成器在十进制代码框架中设置了标志 32。 您想检查并查看它的可移植性,但至少在 cpython 上可能相当可移植。