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

Python函数传参报错:SyntaxError: non-keyword arg after keyword arg 求解

问题根源

你遇到的SyntaxError: non-keyword arg after keyword arg错误,本质是在构建请求参数字典时,违反了Python的参数传递语法规则:

  • 当用dict(key1=val1, key2=val2)这种关键字参数形式创建字典时,所有传入的参数都必须是key=value的键值对格式。
  • 你在procedureName=procedure和projectName=project这两个关键字参数之后,直接塞了一个setParams(...)函数调用——这属于位置参数,Python不允许关键字参数出现在位置参数之前,因此直接触发语法错误。

另外你的逻辑也有小问题:setParams返回的是一个包含parameters键的字典,你需要把这个键值对合并到请求参数里,而不是把函数调用直接丢在dict()的参数列表中。

修正后的代码

这里提供两种修复方式,你可以根据习惯选择:

方式1:用字典解包合并参数(更简洁)

def setParams(params):
    retList=[]
    for param in params:
        retList.append(dict(actualParameterName=param,value=params[param]))
    return dict(parameters=dict(actualParameter=retList))

def runProcedure(procedure, project, invalidlyValidArguments):
    # 合并所有请求参数:基础参数 + setParams返回的参数
    request_params = {
        'procedureName': procedure,
        'projectName': project,
        **setParams(invalidlyValidArguments)  # 用**解包字典,把parameters键加入进来
    }
    print(cmdr.httpPost(cmdr.makeEnvelope(
        cmdr.createRequest('runProcedure', request_params)
    )))

# 调用测试
runProcedure(
    procedure='Build_Single_Module_For_Every_Config',
    project='My-module',
    invalidlyValidArguments={'moduleSelection':'Some_Handler','hakuna':'mattata'}
)

方式2:显式指定parameters键(更直观)

def runProcedure(procedure, project, invalidlyValidArguments):
    print(cmdr.httpPost(cmdr.makeEnvelope(
        cmdr.createRequest('runProcedure', dict(
            procedureName=procedure,
            projectName=project,
            # 直接取出setParams返回的parameters值
            parameters=setParams(invalidlyValidArguments)['parameters']
        ))
    )))

为什么去掉params=还是报错?

即使你把setParams(params=invalidlyValidArguments)改成setParams(invalidlyValidArguments),本质还是在dict(procedureName=..., projectName=..., setParams(...))里把位置参数放在了关键字参数之后——这依然违反Python的参数顺序规则(关键字参数必须在所有位置参数之后),所以错误不会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:07:09