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

向解引用函数传递**kwargs时,为何多余参数会导致报错?

为什么调用kwarg_function(some_func, a=1, b=2, c=3)会因意外关键字参数失败?

Python在通过**kwargs解包调用函数时,会将所有传入的关键字参数完整传递给目标函数,不会自动忽略目标函数未定义的参数。

你的some_func只声明了a和b两个必选参数,没有设置**kwargs来接收额外的关键字参数。当你传递c=3时,Python会判定这是some_func不接受的参数,直接抛出TypeError。

解决办法

有两种常见方式处理这种场景:

1. 在调用前过滤无效参数

借助inspect模块获取目标函数的参数签名,筛选出它能接受的参数后再传递:

import inspect

def kwarg_function(function, **kwargs):
    sig = inspect.signature(function)
    # 只保留目标函数定义过的参数
    valid_kwargs = {k: v for k, v in kwargs.items() if k in sig.parameters}
    print(valid_kwargs)
    function(**valid_kwargs)

def some_func(a, b):
    print(f"type: {type(a)} values: {a}")
    print(f"type: {type(b)} values: {b}")

kwarg_function(some_func, a=1, b=2, c=3)  # 调用成功,c被过滤

2. 让目标函数接受额外参数

修改some_func,添加**kwargs来接收所有多余的关键字参数:

def kwarg_function(function, **kwargs):
    print(kwargs)
    function(**kwargs)

def some_func(a, b, **kwargs):
    print(f"type: {type(a)} values: {a}")
    print(f"type: {type(b)} values: {b}")

kwarg_function(some_func, a=1, b=2, c=3)  # 调用成功,c被**kwargs接收

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:35:26