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

Python中使用curry传递resume参数触发TypeError的问题咨询

问题:curry函数传参引发TypeError错误

现有代码

原curry调用

curry(nn_task, latplan.model.get(parameters["aeclass"]), path, train, train, val, val, parameters)

curry函数定义

def curry(fn,*args1,**kwargs1):
    return lambda *args,**kwargs: fn(*args1,*args,**{**kwargs1,**kwargs})

nn_task函数定义

def nn_task(network, path, train_in, train_out, val_in, val_out, parameters, resume=False):
    ....

错误场景

尝试传入关键字参数resume=True

调用代码:

curry(nn_task, latplan.model.get(parameters["aeclass"]), path, train, train, val, val, parameters, resume=True)

触发错误:

TypeError: nn_task() got multiple values for argument 'resume'

尝试传入位置参数True

调用代码:

curry(nn_task, latplan.model.get(parameters["aeclass"]), path, train, train, val, val, parameters, True)

触发错误:

TypeError: nn_task() takes from 7 to 8 positional arguments but 9 were given

解决方案

由于无法修改现有curry和nn_task函数,正确的做法是将resume=True作为关键字参数传递给curry,且调用curry返回的lambda时不再重复传递resume参数。

正确的调用代码:

curry(nn_task, latplan.model.get(parameters["aeclass"]), path, train, train, val, val, parameters, resume=True)

注:若调用返回的lambda时需要传入额外参数,需确保这些参数不会与nn_task的已有参数冲突;若无需额外参数,直接调用lambda即可,此时nn_task会收到7个位置参数加上resume=True关键字参数,完全符合参数定义。

错误原因解析

  • 场景1报错:若调用lambda时额外传递了resume参数,会导致kwargs1中的resume=True与调用lambda时传入的resume参数合并后,向nn_task同时传递了位置参数形式和关键字参数形式的resume,引发参数冲突。
  • 场景2报错:传入的True会被加入args1,此时args1包含8个位置参数;若调用lambda时又传入了1个额外参数,fn(*args1,*args)就会向nn_task传递9个位置参数,超出其参数数量限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:50:43