You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用@装饰器语法无法得到预期结果该如何解决

问题根因

你代码报错的核心原因是:装饰器内部的wrapper函数已经生成了campaigns_outgoing数据集,但调用被装饰函数时没有把这个数据集作为参数传入,而你定义的dec_test要求必须传入campaigns_outgoing参数,最终触发参数缺失的报错。

修复方案

只需要修改wrapper函数内调用被装饰函数的逻辑,把内部生成的数据集主动传入即可,修改后和你最初手动传参的效果完全一致,修改后的完整代码如下:

import pandas as pd

def prepare_todays_campaigns(decorated):
  def wrapper(*args, **kwargs):
    # creatives x campaign
    campaigns_outgoing = pd.DataFrame({"test":[1,2,3]})
    n_campaigns = len(campaigns_outgoing)
    if n_campaigns > 0:
        print(f"{n_campaigns} to process.")
        # 新增传入内部生成的campaigns_outgoing参数
        decorated(campaigns_outgoing, *args, **kwargs)
  return wrapper

@prepare_todays_campaigns
def dec_test(campaigns_outgoing):
  for _, row in campaigns_outgoing.iterrows():
    print(row)
    
dec_test()

如果后续你需要给dec_test传其他自定义参数,直接在调用dec_test()时传入即可,参数会通过*args、**kwargs正常传递给被装饰函数,不会影响现有逻辑。

内容的提问来源于stack exchange,提问作者Sam Comber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:09:03